Что такое аспектно-ориентированное программирование?

218
задан Community 23 May 2017 в 02:10
поделиться

5 ответов

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;
} 
188
ответ дан Mark Cidade 23 November 2019 в 04:13
поделиться

К сожалению, это, кажется, удивительно трудно сделать AOP действительно полезным в нормальной середине большого размера организации. (Поддержка редактора, смысл управления, то, что Вы запускаете с not-so-important вещей продвижение к гнили кода, люди, идущие домой их семьям, и т.д.)

я поместил свои надежды , составной объект ориентировал программирование , которое является чем-то все более реалистическим. Это соединяется со многими популярными идеями и дает Вам, что-то действительно охлаждается.

Взгляд на и ближайшая реализация здесь: qi4j.org/

пз. На самом деле я думаю, что одна из красот с AOP является также своей ахиллесовой пятой: Его ненавязчивые, позволяющие люди игнорируют его, если они могут, таким образом, это будут рассматривать как вопрос второстепенной важности в большинстве организаций.

15
ответ дан Steven Evers 23 November 2019 в 04:13
поделиться

Скопированный с дубликата для (Эйнштейновой) полноты:

классическими примерами является безопасность и вход. Вместо того, чтобы писать код в рамках Вашего приложения для входа происшествия x или проверки возражают z для управления доступом безопасности существует хитрое изобретение языка "из полосы" нормального кода, который может систематически вводить безопасность или вхождение в стандартные программы, которые не делают nativly имеют их таким способом это даже при том, что код не предоставляет его - его заботившийся из.

А более конкретным примером является операционная система, предоставляющая средства управления доступом файлу. Программа не должна проверять на ограничения доступа, потому что базовая система делает ту работу для нее.

, Если Вы думаете, что Вам нужен AOP, по моему опыту, на самом деле действительно необходимо инвестировать больше времени и усилия в соответствующее управление метаданных в системе с вниманием на хорошо мысль, структурную / проектирование систем.

8
ответ дан paxdiablo 23 November 2019 в 04:13
поделиться

Скопированный с дубликата для полноты (Зуммер):

Класс и атрибуты метода в.NET являются формой аспектно-ориентированного программирования. Вы украшаете свои классы/методы атрибутами. Негласно это добавляет код к Вашему классу/методу, который выполняет конкретные функции атрибута. Например, маркировка сериализуемого класса позволяет ему быть сериализированным автоматически для устройства хранения данных или передачи к другой системе. Другие атрибуты могли бы отметить определенные свойства как несериализуемые, и они будут автоматически опущены от сериализованного объекта. Сериализация является аспектом, реализованным другим кодом в системе, и относилась к Вашему классу приложением атрибута "конфигурации" (художественное оформление).

5
ответ дан paxdiablo 23 November 2019 в 04:13
поделиться

AOP является способом лучше построить Ваше приложение из модулей для функциональности, которая охватывает через несколько границ. AOP является другим способом инкапсулировать эти функции и следовать за Единственным Responsiblity путем перемещения этих сквозных проблем (вход, обработка ошибок, и т.д.) из основных компонентов приложения. Когда используется соответственно AOP может привести к более высоким уровням пригодности для обслуживания и расширяемости в Вашем приложении со временем.

2
ответ дан SaaS Developer 23 November 2019 в 04:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: