Оцените презентацию от 1 до 5 баллов!
Тип файла:
ppt / pptx (powerpoint)
Всего слайдов:
26 слайдов
Для класса:
1,2,3,4,5,6,7,8,9,10,11
Размер файла:
568.50 kB
Просмотров:
67
Скачиваний:
0
Автор:
неизвестен
Слайды и текст к этой презентации:
№1 слайд![Аспектно - ориентированное](/documents_6/e7f685e10d9264a1be252088ab9668f5/img0.jpg)
Содержание слайда: Аспектно - ориентированное программирование
Лекция №6 Антонов В.В.
№2 слайд![Проектирование определение](/documents_6/e7f685e10d9264a1be252088ab9668f5/img1.jpg)
Содержание слайда: Проектирование – определение зависимостей
№3 слайд![Интерфейс Performer и его](/documents_6/e7f685e10d9264a1be252088ab9668f5/img2.jpg)
Содержание слайда: Интерфейс Performer и его реализацию
№4 слайд![Класс с советами](/documents_6/e7f685e10d9264a1be252088ab9668f5/img3.jpg)
Содержание слайда: Класс с «советами»
№5 слайд![Xml настройки нашего](/documents_6/e7f685e10d9264a1be252088ab9668f5/img4.jpg)
Содержание слайда: Xml настройки нашего приложения
№6 слайд![параметре тега pointсut -](/documents_6/e7f685e10d9264a1be252088ab9668f5/img5.jpg)
Содержание слайда: параметре тега pointсut - expression.
execution означает, что аспект выполняется только при запуске соответствующего метода doSmth.
Звездочка перед путем означает, что возвращаемое значение может быть любое
две точки в скобочках, что аргументы могут быть любые.
можно указывать путь к интерфейсу, а не класса. Тогда аспект будет работать для всех классов, которые имплементируют данный интерфейс
№7 слайд![Главный класс](/documents_6/e7f685e10d9264a1be252088ab9668f5/img6.jpg)
Содержание слайда: Главный класс
№8 слайд![Добавим новые советы](/documents_6/e7f685e10d9264a1be252088ab9668f5/img7.jpg)
Содержание слайда: Добавим новые советы
№9 слайд![Добавим новые бины](/documents_6/e7f685e10d9264a1be252088ab9668f5/img8.jpg)
Содержание слайда: Добавим новые бины
№10 слайд![](/documents_6/e7f685e10d9264a1be252088ab9668f5/img9.jpg)
№11 слайд![Фреймворк PostSharp это](/documents_6/e7f685e10d9264a1be252088ab9668f5/img10.jpg)
Содержание слайда: Фреймворк PostSharp
это реализация аспектно-ориентированного подхода для .NET. PostSharp в отличие от многих своих аналогов работает как пост-компилятор, то есть он вносит изменения в MSIL (Microsoft Intermediate Language).
PostSharp позволяет легко создавать атрибуты, которые меняют поведение методов, полей и типов. Для этого нужно унаследовать класс атрибута от одного из предоставляемых библиотекой базовых классов, реализовать его виртуальные методы и применить этот атрибут.
№12 слайд![](/documents_6/e7f685e10d9264a1be252088ab9668f5/img11.jpg)
№13 слайд![Метод OnExit называют советом](/documents_6/e7f685e10d9264a1be252088ab9668f5/img12.jpg)
Содержание слайда: Метод OnExit называют советом (advice), он всегда выполняется (даже если выпадет исключение, так как OnExit вызывается из блока finally) после тела метода, к которому применяется атрибут. Помимо него класс OnMethodBoundaryAspect предоставляет ещё три совета:
OnEntry — выполняется перед телом метода;
OnSuccess — выполняется после успешного выполнения тела метода;
OnException — выполнятся после тела метода в случае, если в методе выпало необработанное исключение.
№14 слайд![](/documents_6/e7f685e10d9264a1be252088ab9668f5/img13.jpg)
№15 слайд![В чём же преимущество](/documents_6/e7f685e10d9264a1be252088ab9668f5/img14.jpg)
Содержание слайда: В чём же преимущество использования АОП в данном примере? Представим, что у нас есть несколько классов, в каждом из которых много методов и нам необходимо реализовать трассировку. Если не использовать АОП, то придётся в теле каждого метода прописывать Trace.WriteLine… Используя же АОП мы выделяем эту сквозную функциональность в отдельную сущность (аспект) и применяем её к методам при помощи атрибута.
PostSharp есть и другие аспекты
OnMethodBoundaryAspect:
EventInterceptionAspect
LocationInterceptionAspect
OnExceptionAspect
…
№16 слайд![](/documents_6/e7f685e10d9264a1be252088ab9668f5/img15.jpg)
№17 слайд![Краткий обзор Unity . Unity](/documents_6/e7f685e10d9264a1be252088ab9668f5/img16.jpg)
Содержание слайда: Краткий обзор Unity 2.0
Unity — это блок приложения, доступный как часть проекта Microsoft Enterprise Library, а также в отдельном виде. Microsoft Enterprise Library — это набор блоков приложения, которые снимают часть проблем, связанных с горизонтальным пересечением иерархии и характерных в разработке .NET-приложений (протоколирование, кеширование, шифрование, обработка исключений и др.).
№18 слайд![Перехват в Unity . Основная](/documents_6/e7f685e10d9264a1be252088ab9668f5/img17.jpg)
Содержание слайда: Перехват в Unity 2.0
Основная концепция перехвата в Unity позволяет разработчикам настраивать цепочку вызовов, необходимых для запуска какого-либо метода некоего объекта.
Иначе говоря, механизм перехвата Unity захватывает вызовы, выдаваемые для настройки объектов, и изменяет поведение целевых объектов, добавляя дополнительный код до, после и вокруг обычного кода методов.
Перехват — фактически очень гибкий подход к добавлению нового поведения для объекта в период выполнения, не затрагивающий его исходный код и не влияющий на поведение классов в той же цепочке наследования.
Перехват в Unity — способ реализации популярного проектировочного шаблона Decorator, разработанного для расширения функциональности объекта в период выполнения и в момент его использования.
Декоратор (decorator) — это объект-контейнер, который принимает (и поддерживает ссылку на) экземпляр целевого объекта и дополняет его возможности.
№19 слайд![Перехват объекта в действии в](/documents_6/e7f685e10d9264a1be252088ab9668f5/img18.jpg)
Содержание слайда: Перехват объекта в действии (в Unity 2.0)
№20 слайд![Настройка перехвата перехват](/documents_6/e7f685e10d9264a1be252088ab9668f5/img19.jpg)
Содержание слайда: Настройка перехвата
перехват реализуется простым добавлением нового расширения к контейнеру, чтобы описать, как будет разрешаться объект.
№21 слайд![добавить в конфигурационный](/documents_6/e7f685e10d9264a1be252088ab9668f5/img20.jpg)
Содержание слайда: добавить в конфигурационный файл
Цель этого сценарного кода — расширение схемы конфигурации новыми элементами и псевдонимами, специфичными для подсистемы перехвата
№22 слайд![Определение контейнера](/documents_6/e7f685e10d9264a1be252088ab9668f5/img21.jpg)
Содержание слайда: Определение контейнера
Перехватчик интерфейса (interface interceptor) — это перехватчик экземпляра, ограниченный в своих действиях до прокси только одного интерфейса объекта. Такой перехватчик создает класс прокси с помощью генерации динамического кода. Элемент поведения interception в конфигурации указывает внешний код, который должен выполняться вокруг перехватываемого экземпляра объекта.
№23 слайд![Класс TraceBehavior нужно](/documents_6/e7f685e10d9264a1be252088ab9668f5/img22.jpg)
Содержание слайда: Класс TraceBehavior нужно конфигурировать декларативно, чтобы контейнер мог разрешать его и любые его зависимости. Чтобы сообщить контейнеру о классе TraceBehavior и его конструкторе вы используете элемент <register>:
№24 слайд![](/documents_6/e7f685e10d9264a1be252088ab9668f5/img23.jpg)
№25 слайд![Класс поведения реализует](/documents_6/e7f685e10d9264a1be252088ab9668f5/img24.jpg)
Содержание слайда: Класс поведения реализует IInterceptionBehavior, который в основном состоит из метода Invoke. Этот метод содержит всю логику, нужную для любого метода, который находится под контролем перехватчика. Если вы хотите сделать что-то до вызова целевого метода, то делаете это в начале метода. Когда вам требуется перейти к целевому объекту (или, точнее, к следующему поведению, зарегистрированному в конвейере), вы вызываете делегат getNext, предоставляемый инфраструктурой.
№26 слайд![Гибкость конфигурирования](/documents_6/e7f685e10d9264a1be252088ab9668f5/img25.jpg)
Содержание слайда: Гибкость конфигурирования
Перехват и AOP в целом открывают целый ряд интересных возможностей. Например, перехват позволяет добавлять обязанности в индивидуальные объекты без модификации всего класса, благодаря чему решение получается гораздо более гибким, чем при использовании шаблона Decorator.