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

16
Аспектно-ориентированный подход на службе веб-приложений Цытович Павел Леонидович Fuse8, Южно-Уральский государственный университет http://pavel-tsytovich.blogspot.com 3-я конференция .NET разработчиков 25 сентября 2011

description

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

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

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

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

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

http://pavel-tsytovich.blogspot.com

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

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

План

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

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

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

View

Model

Controller

DB

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

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

4

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

+ContextInterface()

Strategy

+AlgorithmInterface()

ConcreteStrategy

+strategy

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

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

5

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

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

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

Windows Workflow

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

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

6

Аспект

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

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

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

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

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

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

кода

7

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

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

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

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

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

8

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

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

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

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

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

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

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

класса AspectController

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

10

[Aspect]

Aspect

+Predicate+Action+When

ActionFilter

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

Аспект

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

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

11

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

IAspectPredicate<<interface>>

+IsApplicable(AspectController)

Always

IsModelValid IsAuthorize IsRoles

+GetApplicableRoles()

UserDefinedRolesPredicate

And

Or

Not

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

12

Аспект

IAspectAction<<interface>>

+ExecuteAspect()

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

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

13

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

BaseController

AspectController

+AspectData

+ExecuteCallTimeAspects()+OnAspectException()

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

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

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

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

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

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

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

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

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

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

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

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

[email protected]://twitter.com/Dr_P_Watson

http://pavel-tsytovich.blogspot.com