Я понимаю объектно-ориентированное программирование и давно пишу ОО-программы. Люди, кажется, говорят о аспектно-ориентированном программировании, но я так и не узнал, что это такое и как его использовать. Какова основная парадигма?
Этот вопрос связан, но не совсем его задает:
Аспектно-ориентированное программирование против объектно-ориентированного программирования
Ответы:
АОП решает проблему сквозных проблем , которая представляет собой любой вид кода, который повторяется различными методами и обычно не может быть полностью реорганизован в свой собственный модуль, например, при ведении журнала или проверке. Таким образом, с помощью AOP вы можете оставить этот материал вне основного кода и определить его вертикально следующим образом:
А затем используется аспект-ткач, чтобы скомпилировать код в это:
источник
К сожалению, кажется удивительно трудным сделать АОП действительно полезным в обычной организации среднего размера. (Поддержка редактора, чувство контроля, тот факт, что вы начинаете с не столь важных вещей, которые ведут к гниению кода, людей, идущих домой к своим семьям и т. Д.)
Я возлагаю надежды на композитно-ориентированное программирование , которое становится все более и более реалистичным. Это связано со многими популярными идеями и дает вам что-то действительно классное.
Посмотрите на готовую реализацию здесь: qi4j.org/
PS. На самом деле, я думаю, что одна из красот AOP - это ахиллесова пята: она не навязчива, позволяя людям игнорировать ее, если может, поэтому в большинстве организаций это будет рассматриваться как второстепенная проблема.
источник
Скопировано из дубликата для полноты (Эйнштейн):
Классическими примерами являются безопасность и логирование. Вместо того, чтобы писать код в вашем приложении для регистрации вхождения x или проверки объекта z для контроля безопасного доступа, существует языковая концепция «внеполосного» нормального кода, которая может систематически внедрять безопасность или входить в подпрограммы, которые не имеют их в нативном виде. таким образом, что, хотя ваш код не предоставляет его - об этом позаботились.
Более конкретный пример - операционная система, обеспечивающая контроль доступа к файлу. Программному обеспечению не нужно проверять ограничения доступа, потому что соответствующая система работает для него.
Если вы считаете, что вам нужен AOP в моем опыте, вам действительно нужно вкладывать больше времени и усилий в надлежащее управление метаданными в вашей системе, уделяя особое внимание продуманному проектированию конструкций / систем.
источник
Скопировано из Spring в действии
источник
Скопировано из дубликата для полноты (зуммер):
Атрибуты класса и метода в .NET являются формой аспектно-ориентированного программирования. Вы украшаете свои классы / методы с атрибутами. За кулисами это добавляет код к вашему классу / методу, который выполняет определенные функции атрибута. Например, маркировка сериализуемого класса позволяет автоматически сериализовать его для хранения или передачи в другую систему. Другие атрибуты могут пометить определенные свойства как не сериализуемые, и они будут автоматически исключены из сериализованного объекта. Сериализация - это аспект, реализуемый другим кодом в системе и применяемый к вашему классу с помощью атрибута конфигурации (украшения).
источник
AOP можно использовать для выполнения действий, не связанных с бизнес-логикой вашего приложения, таких как ведение журнала, кэширование и т. Д. Эти действия можно поместить в отдельную часть приложения, а затем повторно использовать в приложении. Обычно есть два способа сделать это. Внедрение кода автоматически с помощью препроцессора до / после метода или присоединение прокси-классов, которые перехватывают вызов метода и могут затем выполнять действия до / после вызова метода.
Вот пример в .Net. Он использует прокси-классы для перехвата вызовов методов и выполнения кода до или после вызовов метода saif.
Аспектно-ориентированное программирование (AOP) в .NET Core и C # с использованием AutoFac и DynamicProxy
источник
Есть пример АОП, он использовал пружинный АОП в качестве примера. Пример довольно прост для понимания.
Среда Spring AOP (Аспектно-ориентированное программирование) используется для модуляции сквозных аспектов в аспектах. Проще говоря, это просто перехватчик для перехвата некоторых процессов, например, когда метод выполняется, Spring AOP может захватить исполняемый метод и добавить дополнительные функциональные возможности до или после выполнения метода.
Ссылка: http://www.mkyong.com/spring/spring-aop-examples-advice/
источник
AOP - это способ улучшить модульность вашего приложения для функциональности, которая охватывает несколько границ. AOP - это еще один способ инкапсулировать эти функции и следовать принципу «Единой ответственности», убрав эти сквозные проблемы (ведение журнала, обработка ошибок и т. Д.) Из основных компонентов вашего приложения. При правильном использовании AOP может привести к более высоким уровням обслуживания и расширяемости в вашем приложении с течением времени.
источник