С появлением подсказок типов (type hints) в Python 3.5+ добавилась опциональная статическая типизация – поэтому эти подсказки так мне нравятся. Теперь я аннотирую ими все мои проекты.
Рубрика «аннотации»
Почему я начал использовать аннотации типов в Python – и вам тоже советую
2022-02-25 в 7:09, admin, рубрики: python, аннотации, Блог компании Издательский дом «Питер», ооп, Программирование, рефакторинг, Совершенный код, типизацияМикросервисы: как соблюсти контракт
2020-01-10 в 9:12, admin, рубрики: acronis, api, API Guideline, аннотации, Блог компании Acronis, микросервисы, проверки, Разработка под LinuxПереход к микросервисной архитектуре требует пересмотра подхода к разработке, тестированию, сопровождению, проектированию – иными словами, ко всем аспектам жизненного цикла программных компонентов. В этом посте мы расскажем о практиках, к которым пришла команда архитекторов Acronis на пути к лучшим API компонентов. Рассказ будет включать как постановку задачи, так и анализ ее решений. Возможно, кому-то этот пост покажется “капитанским”, кому-то будет неясно почему упустили супер-решение Х, но надеемся, что вам он будет интересен и полезен. Строителей микросервисов приглашаем под кат – почитать и оставить свои комментарии.
Что можно делать с аннотациями контрактов микросервисов?
2019-10-10 в 6:19, admin, рубрики: OAS, RAML, rest, RESTful, Swagger. микросервисы, аннотации, Блог компании Acronis, микросервисыВ прошлом посте мы рассказывали о том, как и почему мы в Acronis делаем аннотации к микросервисам, и обещали поделиться своей практикой применения единого формата API для всей платформы Acronis Cyber Platform. Сегодня мы расскажем про свой опыт статических проверок аннотаций – aka первый шаг на пути внедрения аннотаций в компании.
Классы матриц и векторов в Delphi
2017-10-25 в 3:11, admin, рубрики: Delphi, Алгоритмы, аннотации, вектора, математика, матрицы, ооп, перегрузка операций, ПрограммированиеВ этой статье рассматривается проектирование типов для работы с объектами линейной алгебры: векторами, матрицами, кватернионами. Показано классическое применение механизма перегрузки стандартных операций, использование приёма «Copy On Write» и аннотаций.
Читать полностью »
Инициализируемые контроллеры в Symfony и работа с аннотациями
2016-02-18 в 9:17, admin, рубрики: php, symfony, аннотацииДавным давно передо мной встала задача реализовать механизм инициализации контроллеров в Symfony, т.е. выполнение неких дефолтных действий перед каждым вызовом экшна контроллера. Первое, что пришло на ум, — это добавить EventListener для события kernel.controller, в котором будет вызываться метод контроллера initialize, если он есть. Данным способом я пользуюсь уже на протяжении нескольких лет.
Буквально на днях я задумался: а что если необходимо перед экшном выполнить разные методы для разных контроллеров, несколько методов подряд, а некоторые из них даже несколько раз и с разными параметрами? В данной статье я хочу рассказать, как я решил эту проблему с помощью аннотаций. Думаю, эта статья будет полезна в том числе и тем, кто никогда не работал с аннотациями.
Читать полностью »
Разработка модульных приложений на С-C++ с использованием аннотаций
2015-06-18 в 14:53, admin, рубрики: C, Анализ и проектирование систем, аннотации, внедрение зависимостей, конфигурирование, метки: С В моей первой статье я рассказал об использовании препроцессора для организации модульности на уровне исходных текстов в языках С/C++. Вкратце этот способ сводится к написанию специфических метаданных внутри исходников, которые анализируются внешним инструментом и используются для генерации glue-исходников, позволяющих реализовать модульность. Детали реализации описаны в упомянутой статье, поэтому не буду здесь повторяться. В данной статье я пойду чуть дальше и попытаюсь показать, что с помощью метаданных или аннотаций можно реализовать не только модульность, но и некоторые другие полезные фичи. Должно получиться что-то вроде Google Guice или Spring для С (той его части, которая связана с модульностью и аспектами). Отдельно подчеркиваю, что эта статья — дополнение и улучшение первой, поэтому тут я буду говорить не столько технических деталях реализации, сколько о том, как это все выглядит для пользователя. Если эта тема вызовет интерес, то я напишу продолжение с пояснениями о том, как устроено внутри само приложение-конфигуратор.
Читать полностью »
Конфигурирование бинов с помощью аннотаций: решение проблемы с отсутствием наследования для интерфейсов аннотаций
2014-11-24 в 8:47, admin, рубрики: java, spring, аннотации, контекстыОписание проблемы
Пусть у нас есть некоторый класс X, параметризующийся из контейнера свойств PX и есть класс Y, расширяющий X, параметризующийся контейнером PY, расширяющим PX.
Если контейнерами свойств выступают аннотации, то мы имеем два класса:
@PX(propertyX1 = <valueX1>, ..., propertyXN = <valueXN>)
class X {
...
}
И есть класс:
@PY(propertyY1 = <valueY1>, ..., propertyYN = <valueYN>)
class Y extends X {
...
}
Java (в том числе и Java 8) не предоставляют возможность наследования аннотаций, поэтому написать что-то вроде примера ниже нельзя:
public @interface PX extends PY {
}
Разумеется, это не проблема, вот решение:
@PX
class X {
protected final ... propertyX1;
...
protected final ... propertyY1;
X() {
final PX px = getClass().getAnnotation(PX.class);
propertyX1 = px.propertyX1();
...
propertyXN = px.propertyXN();
}
}
@PY
class Y extends X {
Y() {
final PY py = getClass().getAnnotation(PY.class);
propertyY1 = px.propertyY1();
...
propertyYN = px.propertyYN();
}
}
В чем здесь недостаток? Недостаток в том, что мы обрекаем себя на то, что если у класса не будет аннотаций, то он будет сконфигурирован дефолтными значениями (аннотации PX и PY должны быть @Inherited для этого).
Как быть, если нам, к примеру, надо инжектировать проперти из файла .properties или взять их из какого-либо другого источника, например из спрингового Environment?
Если не прибегать к изощренным трюкам типа создания аннотированных классов «на лету» с подстановкой параметров аннотаций, то ничего.
Читать полностью »
Аннотации в Java, часть I
2014-03-31 в 0:16, admin, рубрики: annotations, java, аннотации, Блог компании GolovachCoursesЭто первая часть статьи, посвященной такому языковому механизму Java 5+ как аннотации. Она имеет вводный характер и рассчитана на Junior разработчиков или тех, кто только приступает к изучению языка.
Я занимаюсь онлайн обучением Java и опубликую часть учебных материалов в рамках переработки курса Java Core.
Мой метод обучения состоит в том, что я
- строю усложняющуюся последовательность примеров
- объясняю возможные варианты применения
- объясняю логику двигавшую авторами (по мере возможности)
- даю большое количество тестов (50-100) всесторонне проверяющее понимание и демонстрирующих различные комбинации
- даю лабораторные для самостоятельной работы
Данная статье следует пунктам #1 (последовательность примеров) и #2(варианты применения).
Читать полностью »
linch.me — добавление аннотаций к изображением
2013-10-25 в 3:03, admin, рубрики: аннотации, Артемий Лебедев, линч, я пиарюсь, метки: аннотации, линч
В какой-то момент усталость по поиску удобного инструмента для быстрого добавления подписей на изображения достигла своего апогея, что вылилось в создание сайта для решения этой проблемы.
Читать полностью »
Использование аннотаций в PHP 5.4 для АОП и не только
2012-08-06 в 10:02, admin, рубрики: aop, php, аннотации, Программирование, разработка, метки: aop, PHP, аннотацииПри разработке крупных проектов довольно часто возникает ситуация, когда сквозной функционал, слабо относящийся к бизнес-логике, сильно раздувается, заполняя код однотипными конструкциями. Это может быть логирование операций, работа с кешем или проверка прав доступа. Тут нам на помощь приходит АОП.
Для PHP существует несколько реализаций этой парадигмы программирования. К сожалению, среди них мне не удалось найти решение, которое бы можно было легко внедрить в уже существующий большой проект и удовлетворяющее эстетическим требованиям к коду.
Технологии реализации AOP в PHP
Волшебные методы
Самое простое решение — использование «волшебных методов» __call и __callStatic. Эти методы вызываются (если они определены в классе) при обращении к несуществующему методу класса. В качестве аргументов они получают имя несуществующего метода и переданные ему параметры.
В данном случае, приложение строится таким образом, что реальные методы имеют имя отличное от имени указанном в вызывающих их конструкциях. Сквозной функционал реализуется в «волшебных методах», которые, при необходимости, передают управление реальным методам классов.
Плюсы:
- Легко начать использовать;
- Реализация не требует дополнительных модулей (нативный PHP).
Минусы:
- Не удобно использовать при большом количестве сквозного функционала;
- Т.к. имена методов в определении и в вызовах различаются, создаются трудности при использовании автодополнения кода в IDE.
Предварительный разбор кода
Этот способ подразумевает наличие посредника, позволяющего использовать «синтаксический сахар». Необходимый функционал описывается вспомогательным синтаксисом (xml/json конфигурация, дополнительные php-классы или аннотации в коде), который разбирается посредником. На основе разбора генерируется результирующий код, который содержит вставки сквозного функционала в необходимые места.
Плюсы:
- Работает быстро, т.к. на выходе это обычный PHP-код, просто сгенерированный за Вас автоматически.
Минусы:
- Сложно внедрить в большой проект;
- Требуется разбор кода после каждого изменения, для внесения корректировок в результирующий код.