Аспектно-ориентированный подход на службе...

Post on 16-Jun-2015

657 views 1 download

description

По материалам конференции .NET разработчиков - www.dotnetconf.ru

Transcript of Аспектно-ориентированный подход на службе...

Аспектно-ориентированный подход на службе веб-приложений

Цытович Павел ЛеонидовичFuse8, Южно-Уральский государственный университет

http://pavel-tsytovich.blogspot.com

3-я конференция .NET разработчиков25 сентября 2011

План

• Почему вообще появилась эта тема• Паттерн «Стратегия»• Стратегия привела к аспектам• Как реализованы наши аспекты

Почему вообще появилась эта тема

View

Model

Controller

DB

Множество Вариантов

4

Паттерн стратегияContext

+ContextInterface()

Strategy

+AlgorithmInterface()

ConcreteStrategy

+strategy

От стратегии к аспектам

5

Формирование модели (MVC) Рассылка писем Чтение файлов

конфигурации

мониторинг транзакцииУправление

Windows Workflow

Сквозная функциональность!

6

Аспект

аспект — это повторно используемый компонент, который инкапсулирует

поведение, необходимое множеству классов в проекте

Сравнение АОП и DI • АОП & DI• Оба добиваются слабой связанности в

архитектуре• Оба добиваются лучшего разделения

функционала• Оба разгружают часть проблем с основного

кода

7

http://habrahabr.ru/blogs/net/123186/

Сравнение АОП и DI • АОП vs DI• DI хорош, когда вы имеете зависимость от

компонент, причем вам не важно как они реализованы

• АОП хорош, когда вам необходимо применить какое-то поведение к большому количеству элементов кода. Причем, целевой код не обязательно зависит от этого поведения

8

http://habrahabr.ru/blogs/net/123186/

Наш аспект-фреймворк для ASP.NET MVC

• Основан на ActionFilter атрибутах ASP.NET MVC• Требует реализации интерфейсов• IAspectPredicate – условия при котором выполняется

аспект• IAspectAction – код аспекта, запускаемый при

выполнении условия• Привязывается к Action-методу с помощью

атрибута Aspect• Требует, чтобы контроллер наследовался от

класса AspectController

10

[Aspect]

Aspect

+Predicate+Action+When

ActionFilter

Условие выполнения аспекта

Аспект

Время выполнения (before,calltime,after)

11

ПредикатОпределяет условие выполнение аспекта

IAspectPredicate<<interface>>

+IsApplicable(AspectController)

Always

IsModelValid IsAuthorize IsRoles

+GetApplicableRoles()

UserDefinedRolesPredicate

And

Or

Not

12

Аспект

IAspectAction<<interface>>

+ExecuteAspect()

Этот метод содержащий код аспекта

13

Контроллер с поддержкой аспектов

BaseController

AspectController

+AspectData

+ExecuteCallTimeAspects()+OnAspectException()

Словарь для передачи данных между аспектами и между аспектами и контроллером

Метод, запускающий выполнение аспектов calltime

Метод-ловушка исключений в аспектах

ДЕМОНСТРАЦИЯ

Дальнейшее направление работы

• Поддержка транзакций (возможность отмены действия аспектов)

• Асинхронные аспекты

Спасибо за внимание

Цытович Павел ЛеонидовичFuse8, Южно-Уральский государственный университет

Pavel.tsytovich@gmail.comhttp://twitter.com/Dr_P_Watson

http://pavel-tsytovich.blogspot.com