Подтвердить что ты не робот

Основы AOP

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

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

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

4b9b3361

Ответ 1

Разделение проблем является основополагающим принципом в разработке программного обеспечения, существует классическая статья Дэвида Парнаса О критериях, которые будут использоваться в системах разложения в модули, которые могут познакомить вас с предметом, а также читать Принципы дяди Боба SOLID.

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

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

Вы можете найти хорошую главу на эту тему в Sommerville Software engineering book

Полезные ссылки C2 wiki CrossCuttingConcern, MSDN, Как решать проблемы, связанные с перекрестными ссылками в разработке ориентированного на развитие программного обеспечения

Ответ 2

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

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

Аспектно-ориентированное программирование (AOP) в мире .net с использованием Castle Windsor или Аспектно-ориентированное программирование (AOP) в мире .net с использованием Unity

Ответ 3

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

Ответ 4

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