Расширение функциональности с использованием...
Post on 15-Jun-2015
2.330 Views
Preview:
DESCRIPTION
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