300 likes | 455 Views
3 -я конференция .NET разработчиков 2 5 сентября 2011. Расширение функциональности с использованием метаданных и аспектно-ориентированного программирования. Александр Межов ОАО ЧЭМК http://mezhov.blogspot.com. Немного теории. Metadata. Метаданные ( Metadata)
E N D
3-я конференция .NET разработчиков 25 сентября 2011 Расширение функциональности с использованием метаданных и аспектно-ориентированного программирования Александр Межов ОАО ЧЭМК http://mezhov.blogspot.com
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 • Перехват методов интерфейса • Перехват методов класса (virtual, abstract) Client Proxy Перехватчики Перехватчики Interceptors Target
Аудит изменений Вариант решения
Что будем использовать • 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) в момент создания, изменения или удаления объекта
Регистрация перехватчика Где-то на этапе инициализации приложения…
Ссылки • Материалы конференции • 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.com • http://mezhov.blogspot.com/ • http://www.gotdotnet.ru/blogs/AlexMAS