2011-01-27 4 views
21

Аспектно-ориентированное программирование - это предмет, который мне очень трудно найти. В моем старом учебнике по программному обеспечению упоминается только кратко (и неопределенно), а википедия и различные другие учебники/статьи, которые я смог найти на ней, дают ультра-академические, сильно абстрактные определения того, что это такое, как использовать его, и когда его использовать. Определения, которые я просто не понимаю.Основы AOP

Мое (очень плохое) понимание АОП заключается в том, что существует много аспектов создания высококачественной программной системы, которая не подходила бы аккуратно в приятный небольшой сплоченный пакет. Некоторые классы, такие как Loggers, Validators, DatabaseQueries и т. Д., Будут использоваться по всей вашей кодовой базе и, следовательно, будут сильно связаны. Мой (опять же, очень плохой) понимание АОП заключается в том, что он связан с лучшими практиками обращения с этими типами «универсально связанных» пакетов.

Вопрос: Это правда, или я полностью отключен? Если я полностью ошибаюсь, может кто-то, пожалуйста, дать краткое объяснение простых людей, что такое АОП, пример так называемого аспекта и, возможно, даже представить простой пример кода?

+4

хороший вопрос также хорошо поставлена ​​под сомнение. –

ответ

12

Разделение проблем является основополагающим принципом в разработке программного обеспечения, есть классическая статья Дэвида Парнаса On the Criteria To Be Used in Decomposing Systems into Modules, которая может познакомить вас с предметом, а также читать Uncle Bob's SOLID Principles.

Но тогда есть проблемы с перекрестными разрезами, которые могут быть включены во многие случаи использования, такие как аутентификация, авторизация, валидация, ведение журнала, обработка транзакций, обработка исключений, кэширование и т. Д., Которые порождают все слои в программном обеспечении. И если вы хотите решить проблему без дублирования и используя принцип DRY, вы должны обработать ее сложным способом.

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

Вы можете найти хороший раздел по этой теме в Sommerville's Software engineering book

Полезные ссылки C2 wiki CrossCuttingConcern, MSDN, How to Address Crosscutting Concerns in Aspect Oriented Software Development

+0

Jani - спасибо за полезный ответ и ссылки. Мне потребуется некоторое время, чтобы «переварить» их, но я уверен, что после выходных я получу более образованные вопросы. На этот вопрос я буду отвечать, потому что последующие вопросы будут более конкретными. Еще раз спасибо! – Eugie

+0

Мой радостный чувак, я был бы рад, если я могу вам помочь, удачи –

+2

хорошо объяснительный пример для понимания АОП здесь, на http://stackoverflow.com/questions/232884/aspect-oriented-programming-vs-object-oriented Программирующ/232918 # 232918 –

0

АОП - это сквозные проблемы, то есть все, что вам нужно делать в течение всего приложения. Например, регистрация. Предположим, вы хотите отслеживать, когда вы вводите и выходите из метода. Это очень легко с аспектами. В основном вы указываете «обработчик» для события, например, ввод метода. При необходимости вы также можете указать с помощью «подстановочных знаков», какие методы вам интересны, и тогда это всего лишь вопрос написания кода обработчика, который может, например, регистрировать некоторую информацию.

0

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

2

АОП - это метод, в котором мы извлекаем и удаляем проблемы перекрестной резки (ведение журнала, обработка исключений, ....) из нашего кода в его собственный аспект. оставляя наш оригинальный код, ориентируясь только на бизнес-логику. не только это делает наш код более читабельным, поддерживаемым, но и кодом DRY.

Это может быть лучше объяснить на примере:

Aspect Oriented Programming (AOP) in the .net world using Castle Windsor или Aspect Oriented Programming (AOP) in the .net world using Unity