Расширение функциональности с использованием...

Post on 15-Jun-2015

2.330 Views

Category:

Documents

4 Downloads

Preview:

Click to see full reader

DESCRIPTION

По материалам конференции .NET разрабо

TRANSCRIPT

Расширение функциональности с использованием метаданных и

аспектно-ориентированного программирования

Александр МежовОАО ЧЭМК

http://mezhov.blogspot.com

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

Немного теории

Metadata

• Метаданные (Metadata)• Данные об объекте, характеризующие его в

некотором контексте использования (аспекте)

Aspect

• Аспект (Aspect)• Сквозная (инфраструктурная)

функциональность, которая инкапсулирует некоторое общее поведение

Примеры аспектов

• Обработка ошибок• Трассировка запросов• Проверка прав доступа• Аудит (логирование) изменений• . . .

Join point

• Точка слияния (Join point)• Место, куда будет встроен код аспекта

(например, вызов метода)

Advice

• Подача (Advice)• Встраиваемый код, который может быть

выполнен до, после или в самой точке соединения

Metadata & Aspect

Metadata

Aspect 1

Aspect 2

Aspect 3

Реализации

• PostSharp• Подача через атрибуты

• Aspect.NET• Подача через атрибуты

• Spring.NET AOP• Подача через перехват вызовов

• Unity• Подача через перехват вызовов

Подача через атрибуты

Подача через атрибуты

• Просто добавлять (+)• Можно тестировать (+)• Экземпляры создаются через new (+)

• Сложно модифицировать (–)• Увеличивает связность аспектов (–)

Слишком много атрибутов

Подача через перехват вызовов

Подача через атрибуты

• Просто добавлять (+)• Можно тестировать (+)• Просто модифицировать (+)• Аспекты никак не связаны (+)

• Экземпляры создаются через фабрику (–)

Unity & AOP

• Перехват методов интерфейса• Перехват методов класса (virtual, abstract)

Возможности Unity

Proxy

TargetClie

nt

Перехватчики

Перехватчики

Inte

rcep

tor

s

Demo: Unity Interception

Аудит изменений

Вариант решения

Что будем использовать

• Unity 2.0• Unity Application Block (Unity)

Metadata & Aspect

Metadata

History Aspect

Работа с метаданными

• Создаются для определенного типа• Содержат информацию об аспектах• Хранятся в отдельной сборке (сборках)

Пример метаданныхОпределение типа:

Определение метаданных для типа:

Аспект истории

Поиск метаданных

• Сборка метаданных:• ..\Metadata\{Type Assembly}.Metadata.dll

• Класс метаданных:• {Type Name}Metadata : IMetadata

Аспект истории

• Формирует список изменений (change set) для конкретного действия с данными: Inset, Update и Delete

Перехватчик для аудита

• Перехватывает вызовы хранилища (repository) в момент создания, изменения или удаления объекта

Регистрация перехватчика

Где-то на этапе инициализации приложения…

Как использовать?

Demo: History Aspect

Ссылки

• Материалы конференции• http://dotnetconf.ru/Materialy

• Аспектно-ориентированное программирование, перехват и Unity 2.0 (Дино Эспозито)

• http://msdn.microsoft.com/ru-ru/magazine/gg490353.aspx

• Перехватчики в Unity (Дино Эспозито)• http://msdn.microsoft.com/ru-ru/magazine/gg535676.aspx

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

Александр МежовОАО ЧЭМК

as.mezhov@gmail.comhttp://mezhov.blogspot.com/

http://www.gotdotnet.ru/blogs/AlexMAS

top related