30
Расширение функциональности с использованием метаданных и аспектно- ориентированного программирования Александр Межов ОАО ЧЭМК http://mezhov.blogspot.com 3-я конференция .NET разработчиков 25 сентября 2011

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

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: Расширение функциональности с использованием метаданных и аспектно-ориентированного программирования

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

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

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

http://mezhov.blogspot.com

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

Page 2: Расширение функциональности с использованием метаданных и аспектно-ориентированного программирования

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

Page 3: Расширение функциональности с использованием метаданных и аспектно-ориентированного программирования

Metadata

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

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

Page 4: Расширение функциональности с использованием метаданных и аспектно-ориентированного программирования

Aspect

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

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

Page 5: Расширение функциональности с использованием метаданных и аспектно-ориентированного программирования

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

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

Page 6: Расширение функциональности с использованием метаданных и аспектно-ориентированного программирования

Join point

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

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

Page 7: Расширение функциональности с использованием метаданных и аспектно-ориентированного программирования

Advice

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

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

Page 8: Расширение функциональности с использованием метаданных и аспектно-ориентированного программирования

Metadata & Aspect

Metadata

Aspect 1

Aspect 2

Aspect 3

Page 9: Расширение функциональности с использованием метаданных и аспектно-ориентированного программирования

Реализации

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

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

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

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

Page 10: Расширение функциональности с использованием метаданных и аспектно-ориентированного программирования

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

Page 11: Расширение функциональности с использованием метаданных и аспектно-ориентированного программирования

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

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

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

Page 12: Расширение функциональности с использованием метаданных и аспектно-ориентированного программирования

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

Page 13: Расширение функциональности с использованием метаданных и аспектно-ориентированного программирования

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

Page 14: Расширение функциональности с использованием метаданных и аспектно-ориентированного программирования

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

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

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

Page 15: Расширение функциональности с использованием метаданных и аспектно-ориентированного программирования

Unity & AOP

Page 16: Расширение функциональности с использованием метаданных и аспектно-ориентированного программирования

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

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

Proxy

TargetClie

nt

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

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

Inte

rcep

tor

s

Page 17: Расширение функциональности с использованием метаданных и аспектно-ориентированного программирования

Demo: Unity Interception

Page 18: Расширение функциональности с использованием метаданных и аспектно-ориентированного программирования

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

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

Page 19: Расширение функциональности с использованием метаданных и аспектно-ориентированного программирования

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

• Unity 2.0• Unity Application Block (Unity)

Page 20: Расширение функциональности с использованием метаданных и аспектно-ориентированного программирования

Metadata & Aspect

Metadata

History Aspect

Page 21: Расширение функциональности с использованием метаданных и аспектно-ориентированного программирования

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

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

Page 22: Расширение функциональности с использованием метаданных и аспектно-ориентированного программирования

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

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

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

Page 23: Расширение функциональности с использованием метаданных и аспектно-ориентированного программирования

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

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

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

Page 24: Расширение функциональности с использованием метаданных и аспектно-ориентированного программирования

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

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

Page 25: Расширение функциональности с использованием метаданных и аспектно-ориентированного программирования

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

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

Page 26: Расширение функциональности с использованием метаданных и аспектно-ориентированного программирования

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

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

Page 27: Расширение функциональности с использованием метаданных и аспектно-ориентированного программирования

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

Page 28: Расширение функциональности с использованием метаданных и аспектно-ориентированного программирования

Demo: History Aspect

Page 29: Расширение функциональности с использованием метаданных и аспектно-ориентированного программирования

Ссылки

• Материалы конференции• 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

Page 30: Расширение функциональности с использованием метаданных и аспектно-ориентированного программирования

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

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

[email protected]://mezhov.blogspot.com/

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