В реальной жизни мы повсюду сталкиваемся с различными контрактами: при устройстве на работу, при выполнении работ, при подписании взаимных соглашений и многими другими. Юридическая сила контрактов гарантирует нам защиту интересов и не допускает их нарушения без последствий, что дает нам уверенность в том, что те пункты, которые описаны в контракте — будут выполнены. Эта уверенность помогает нам планировать время, планировать расходы, а также планировать необходимые ресурсы. А что если и программный код будет описываться контрактами? Интересно? Тогда добро пожаловать под кат!
Читать полностью »
Метка «aop»
Контрактное программирование в PHP
2014-03-03 в 5:56, admin, рубрики: php, Веб-разработка, контракты, разработка, метки: aop, PHP, контрактыAOP in action. AspectJ (CTW) + Spring + LTW
2013-07-18 в 7:58, admin, рубрики: aop, java, maven, spring, Weblogic, Программирование, разработка, метки: aop, java, maven, spring, WeblogicРешил внедрить АОП логирование на проект и не внедрил. Как и почему, собственно и хочу поделиться.
Я не буду описывать суть и принципы АОП, а опишу только те проблемы, с которыми я столкнулся, и решения которых заняло много времени.
У меня было в распоряжении Spring, WebLogic, google.com и проект, куда я хотел внедрить АОП логирование. Скажу сразу, до этого я никогда не работал с АОП.
Проблема № 1
Spring AOP – использует proxy-based подход.
Если у нас есть класс (СlassA) с методами (methodA, methodB), при этом methodB() вызывает methodA() и аспект (допустим after) который должен выполняться при вызове methodA():
Шаблон программирования «Текучий интерфейс» в PHP. Свежий взгляд
2013-03-23 в 11:13, admin, рубрики: aop, aspect oriented programming, fluent interface, pattern, php, Веб-разработка, Программирование, метки: aop, aspect oriented programming, fluent interface, pattern, PHP
При разработке программного обеспечения одной из важных составляющих является высокая читабельность исходного кода программы. Существуют специальные методики и рекомендации, которые позволяют добиться улучшения читабельности исходного кода. Одной из методик улучшения читабельности исходного кода является применение «текучих интерфейсов» (англ. Fluent Interface). О нем мы и поговорим в данной статье.
Читать полностью »
Знакомимся с аспектно-ориентированным программированием в PHP
2013-02-25 в 18:27, admin, рубрики: aop, architecture, aspect oriented programming, php, Веб-разработка, Программирование, метки: aop, architecture, aspect oriented programming, PHP, ооп При разработке программного обеспечения программисты и архитекторы пользуются декомпозицией — представлением объектов и взаимосвязей между ними в виде классов, объектов, их свойств и методов.
Проводя декомпозицию, удается получить более точное представление объектов из реальной жизни в виде программного кода. Именно благодаря этому принципу, объектно-ориентированное программирование получило столь широкую популярность во всех языках программирования. Модель представления объектов реальной жизни в виде инстансов классов очень удобна: мы можем наделять класс набором методов и свойств, позволяя взаимодействовать с окружающей средой.
Читать полностью »
Избавляемся от дублирования сквозного кода в PHP: рефакторинг кода с АОП
2013-01-10 в 9:40, admin, рубрики: aop, aspect oriented programming, php, Веб-разработка, Программирование, метки: aop, aspect oriented programming, PHPДумаю, каждому программисту знаком принцип единственной ответственности, ведь не зря он существует: соблюдая его, можно написать код лучше, он будет более понятным, его будет легче дорабатывать.
Но чем больше каждый из нас работает с кодом, тем больше приходит понимание того, что на существующем уровне языка — объектно-ориентированном — этого сделать невозможно. А мешает нам в соблюдении принципа единственной ответственности такой факт, как сквозная функциональность.
Эта статья о том, как можно избавиться от дублирования сквозного кода, и как сделать его чуточку лучше с помощью АОП.
Использование аннотаций в PHP 5.4 для АОП и не только
2012-08-06 в 10:02, admin, рубрики: aop, php, аннотации, Программирование, разработка, метки: aop, PHP, аннотацииПри разработке крупных проектов довольно часто возникает ситуация, когда сквозной функционал, слабо относящийся к бизнес-логике, сильно раздувается, заполняя код однотипными конструкциями. Это может быть логирование операций, работа с кешем или проверка прав доступа. Тут нам на помощь приходит АОП.
Для PHP существует несколько реализаций этой парадигмы программирования. К сожалению, среди них мне не удалось найти решение, которое бы можно было легко внедрить в уже существующий большой проект и удовлетворяющее эстетическим требованиям к коду.
Технологии реализации AOP в PHP
Волшебные методы
Самое простое решение — использование «волшебных методов» __call и __callStatic. Эти методы вызываются (если они определены в классе) при обращении к несуществующему методу класса. В качестве аргументов они получают имя несуществующего метода и переданные ему параметры.
В данном случае, приложение строится таким образом, что реальные методы имеют имя отличное от имени указанном в вызывающих их конструкциях. Сквозной функционал реализуется в «волшебных методах», которые, при необходимости, передают управление реальным методам классов.
Плюсы:
- Легко начать использовать;
- Реализация не требует дополнительных модулей (нативный PHP).
Минусы:
- Не удобно использовать при большом количестве сквозного функционала;
- Т.к. имена методов в определении и в вызовах различаются, создаются трудности при использовании автодополнения кода в IDE.
Предварительный разбор кода
Этот способ подразумевает наличие посредника, позволяющего использовать «синтаксический сахар». Необходимый функционал описывается вспомогательным синтаксисом (xml/json конфигурация, дополнительные php-классы или аннотации в коде), который разбирается посредником. На основе разбора генерируется результирующий код, который содержит вставки сквозного функционала в необходимые места.
Плюсы:
- Работает быстро, т.к. на выходе это обычный PHP-код, просто сгенерированный за Вас автоматически.
Минусы:
- Сложно внедрить в большой проект;
- Требуется разбор кода после каждого изменения, для внесения корректировок в результирующий код.
Замена кода приложения во время выполнения
Синтаксический сахар АОП в JavaScript
2012-06-09 в 0:20, admin, рубрики: aop, javascript, Программирование, метки: aop, javascriptЗачастую бывает полезно добавить какую-нибудь дополнительную логику в код, которая собирает данные по ходу работы приложения, например подсчет количества вызовов, или обработка ошибок. Но портить существующий компактно написанный код (если конечно у вас есть такое счастье) не очень-то хочется. Решение в виде приемов АОП существует уже давно, и широко применятся. На платформах .NET и Java многие АОП фреймворки ориентируются на применение атрибутов к методам и классам. Выглядит код почти неизмененным, а в распоряжении оказывается достаточно мощный механизм расширения функциональности.
В JavaScript таких фреймворков не так много, и те, которые я успел найти, при расширении функций походили на обыкновенную подписку на события. В общем, не совсем понравился синтаксис, захотелось чего-нибудь простого, и более приближенного к «высоким материям» .NET и Java. Читать полностью »
Разработка / Применение AOP для отладки чужой библиотеки
2012-02-23 в 14:05, admin, рубрики: aop, aspectj, debug, отладка, трассировка, метки: aop, aspectj, debug, отладка, трассировкаНа Хабре уже поднималась тема аспектно-ориентированного программирования (Aspect-oriented programming, AOP). Этой парадигме уже не так мало лет, но ее использование отнюдь не повсеместно. В комментариях регулярно обсуждается, а нужна ли она вообще или для каких целей всё же выгодно ее использовать.
В этой статье я хочу описать один из примеров применения — реальную ситуацию, где AOP меня выручило. Притом, я просто не знаю приемлемого способа решения безЧитать полностью »