АОП разработан, чтобы охватить то, что он называет сквозными проблемами, то есть функциональность, которая требуется для многих объектов в системе, но которая не является основной для интересов этих объектов. Если такие требования удовлетворяются путем кодирования сквозной проблемы в объектах по всей системе, мы получаем беспорядочную, сложную в обслуживании реализацию, разделенную на множество объектов.
Классическим примером сквозной проблемы является ведение журнала: ведение журнала важно для реальной, действующей системы и должно быть реализовано во всей системе, но на самом деле не является проблемой для объектов в этой системе: система em> может потребоваться объект расчета налога с продаж для реализации регистрации, но регистрация на самом деле не является проблемой самого объекта расчета налога с продаж. АОП позволяет нам определять эти общесистемные (сквозные) требования отдельно от нашей основной бизнес-логики, а затем связывать их вместе, либо во время выполнения, либо во время компиляции.
АОП работает путем перехвата вызовов методов объектов. Точки перехвата известны как pointcuts, а перехваченный метод - это рекомендуемый метод, а код, сообщающий о перехваченном методе, известен как совет. Я знаком с АОП только через Spring.Net AOP Framework, который позволяет вам указывать и применять pointcut и советы как через файлы конфигурации, так и программно. Spring.Net AOP имеет четыре типа рекомендаций: до, после, вокруг и выбросы, которые вызываются при перехвате рекомендованного метода до вызова рекомендованного метода, после вызывается как до, так и после его вызова и при возникновении исключения соответственно. Независимо от того, применяется ли он через конфигурацию или программно, метод advice ничего не знает о Spring.Net AOP или даже о том, что он был рекомендован.
Другой пример использования АОП - транзакции. Если мы попытаемся реализовать это в коде внутри объектов, мы получим объекты, которые должны знать, что они действуют в рамках транзакции, что, на мой взгляд, не является желательной особенностью дизайна. АОП позволяет нам создавать и координировать транзакции извне по отношению к объектам, участвующим в транзакции, что может дать гораздо более стабильный и удобный в обслуживании дизайн.
Документация Spring.Net очень хорошо объясняет АОП в целом и реализацию АОП в Spring.Net в частности и содержит множество примеров. На него стоит взглянуть, даже если вы не планируете использовать фреймворк Spring.Net AOP.
person
Alfamale
schedule
08.04.2010