Аспектно-ориентированный подход на службе веб- приложений Цытович Павел Леонидович Fuse8, Южно-Уральский государственный университет 3-я конференция.NET разработчиков 25 сентября 2011
План Почему вообще появилась эта тема Паттерн «Стратегия» Стратегия привела к аспектам Как реализованы наши аспекты
Почему вообще появилась эта тема View Model Controller DB Множество Вариантов
Паттерн стратегия 4
От стратегии к аспектам 5 Формирование модели (MVC) Рассылка писем Чтение файлов конфигурации мониторинг транзакции Управление Windows Workflow Сквозная функциональность!
Аспект 6 аспект это повторно используемый компонент, который инкапсулирует поведение, необходимое множеству классов в проекте
Сравнение АОП и DI АОП & DI Оба добиваются слабой связанности в архитектуре Оба добиваются лучшего разделения функционала Оба разгружают часть проблем с основного кода 7
Сравнение АОП и DI АОП vs DI DI хорош, когда вы имеете зависимость от компонент, причем вам не важно как они реализованы АОП хорош, когда вам необходимо применить какое-то поведение к большому количеству элементов кода. Причем, целевой код не обязательно зависит от этого поведения 8
Наш аспект-фреймворк для ASP.NET MVC Основан на ActionFilter атрибутах ASP.NET MVC Требует реализации интерфейсов IAspectPredicate – условия при котором выполняется аспект IAspectAction – код аспекта, запускаемый при выполнении условия Привязывается к Action-методу с помощью атрибута Aspect Требует, чтобы контроллер наследовался от класса AspectController
[Aspect] 10 Условие выполнения аспекта Аспект Время выполнения (before,calltime,after)
Предикат 11 Определяет условие выполнение аспекта
Аспект 12 Этот метод содержащий код аспекта
Контроллер с поддержкой аспектов 13 Словарь для передачи данных между аспектами и между аспектами и контроллером Метод, запускающий выполнение аспектов calltime Метод-ловушка исключений в аспектах
ДЕМОНСТРАЦИЯ
Дальнейшее направление работы Поддержка транзакций (возможность отмены действия аспектов) Асинхронные аспекты
Спасибо за внимание Цытович Павел Леонидович Fuse8, Южно-Уральский государственный университет