AOP решает проблему сквозные проблемы , который был бы любым видом кода, который повторяется в различных методах и не может обычно быть полностью пересмотрен в его собственный модуль, как с входом или проверкой. Так, с AOP можно упустить тот материал из основного кода и определить его вертикально как так:
function mainProgram()
{
var x = foo();
doSomethingWith(x);
return x;
}
aspect logging
{
before (mainProgram is called):
{
log.Write("entering mainProgram");
}
after (mainProgram is called):
{
log.Write( "exiting mainProgram with return value of "
+ mainProgram.returnValue);
}
}
aspect verification
{
before (doSomethingWith is called):
{
if (doSomethingWith.arguments[0] == null)
{
throw NullArgumentException();
}
if (!doSomethingWith.caller.isAuthenticated)
{
throw Securityexception();
}
}
}
И затем ткач аспекта используется для компиляции кода в это:
function mainProgram()
{
log.Write("entering mainProgram");
var x = foo();
if (x == null) throw NullArgumentException();
if (!mainProgramIsAuthenticated()) throw Securityexception();
doSomethingWith(x);
log.Write("exiting mainProgram with return value of "+ x);
return x;
}
К сожалению, это, кажется, удивительно трудно сделать AOP действительно полезным в нормальной середине большого размера организации. (Поддержка редактора, смысл управления, то, что Вы запускаете с not-so-important вещей продвижение к гнили кода, люди, идущие домой их семьям, и т.д.)
я поместил свои надежды , составной объект ориентировал программирование , которое является чем-то все более реалистическим. Это соединяется со многими популярными идеями и дает Вам, что-то действительно охлаждается.
Взгляд на и ближайшая реализация здесь: qi4j.org/
пз. На самом деле я думаю, что одна из красот с AOP является также своей ахиллесовой пятой: Его ненавязчивые, позволяющие люди игнорируют его, если они могут, таким образом, это будут рассматривать как вопрос второстепенной важности в большинстве организаций.
Скопированный с дубликата для (Эйнштейновой) полноты:
классическими примерами является безопасность и вход. Вместо того, чтобы писать код в рамках Вашего приложения для входа происшествия x или проверки возражают z для управления доступом безопасности существует хитрое изобретение языка "из полосы" нормального кода, который может систематически вводить безопасность или вхождение в стандартные программы, которые не делают nativly имеют их таким способом это даже при том, что код не предоставляет его - его заботившийся из.
А более конкретным примером является операционная система, предоставляющая средства управления доступом файлу. Программа не должна проверять на ограничения доступа, потому что базовая система делает ту работу для нее.
, Если Вы думаете, что Вам нужен AOP, по моему опыту, на самом деле действительно необходимо инвестировать больше времени и усилия в соответствующее управление метаданных в системе с вниманием на хорошо мысль, структурную / проектирование систем.
Скопированный с дубликата для полноты (Зуммер):
Класс и атрибуты метода в.NET являются формой аспектно-ориентированного программирования. Вы украшаете свои классы/методы атрибутами. Негласно это добавляет код к Вашему классу/методу, который выполняет конкретные функции атрибута. Например, маркировка сериализуемого класса позволяет ему быть сериализированным автоматически для устройства хранения данных или передачи к другой системе. Другие атрибуты могли бы отметить определенные свойства как несериализуемые, и они будут автоматически опущены от сериализованного объекта. Сериализация является аспектом, реализованным другим кодом в системе, и относилась к Вашему классу приложением атрибута "конфигурации" (художественное оформление).
AOP является способом лучше построить Ваше приложение из модулей для функциональности, которая охватывает через несколько границ. AOP является другим способом инкапсулировать эти функции и следовать за Единственным Responsiblity путем перемещения этих сквозных проблем (вход, обработка ошибок, и т.д.) из основных компонентов приложения. Когда используется соответственно AOP может привести к более высоким уровням пригодности для обслуживания и расширяемости в Вашем приложении со временем.