SlideShare a Scribd company logo
1 
© Luxoft Training 2012 
AOP & Design Patterns 
Андрей Гордиенков 
my@violet-tape.net 
softblog.violet-tape.ru
2 
Luxoft Training & GoSharp Conference 2014 
Обо мне 
 Фанат программирования и рассказов о 
программировании 
 Ведет свой блог 5+ года: статьи и видео 
 АОП евангелист 
 Очень ленив, поэтому ищет пути как писать меньше, а 
делать больше
3 
Luxoft Training & GoSharp Conference 2014 
Что такое АОП? 
Аспе́ ктно-ориенти́ рованное программи́ рование (в дальнейшем АОП) 
— это методика программирования в рамках классовой парадигмы, 
основанная на понятии аспекта — блока кода, инкапсулирующего 
сквозное поведение в составе классов и повторно используемых 
модулей. 
Wikibooks 
Все средства АОП предоставляют средства для выделения сквозной 
функциональности в отдельную сущность.
4 
Luxoft Training & GoSharp Conference 2014 
Шаблоны банды четырех 
 Мировой бестселлер вышел в 1994 году 
 23 шаблона были разделены на 3 группы: 
 Создание объектов 
 Композиция объектов 
 Поведение объектов 
 Облегчают понимание и модификацию, но несколько усложняют 
код
5 
Luxoft Training & GoSharp Conference 2014 
Применимость АОП 
 Логирование 
 Трассировка 
 Но: 
– банальные случаи 
 Применимость гораздо шире! 
 Например, шаблоны проектирования 
 Обеспечение уровня доступа к данным
6 
Luxoft Training & GoSharp Conference 2014 
Применимость АОП – не банальные случаи 
 Автоматизация инструментирования 
 Например, расставить другие атрибуты для классов 
 Реализация GoF шаблонов с помощью АОП 
 Многие шаблоны можно отделить и применять декларативно 
 Безопасная работа с многопоточностью 
 Обработка исключений 
 Контракты на использование типов данных 
 UndoRedo 
 Большая часть примеров использования есть на postsharp.net
7 
Luxoft Training & GoSharp Conference 2014 
Аспекты не применимы 
 Façade – не выигрывает от применения аспектов. 
 Цель шаблона предоставить более удобное API для подсистемы
8 
Luxoft Training & GoSharp Conference 2014 
Аспекты не играют особенной роли 
 Неочевидный выигрыш для шаблонов: 
 State 
 Interpreter 
 Аспекты позволяют чуть сильнее локализировать код шаблона.
9 
Luxoft Training & GoSharp Conference 2014 
Аспекты могут помочь при определенных условиях 
 Следующие шаблоны используют мощь наследования для 
достижения целей 
 Abstract Factory 
 Factory Method 
 Template Method 
 Builder 
 Bridge 
 Аспекты могут нести в себе код из абстрактных классов, 
освобождая место для явного наследования
10 
Luxoft Training & GoSharp Conference 2014 
Аспекты могут облегчить жизнь 
 Большая часть поведения, может быть выделена в аспект для 
следующих шаблонов: 
 Composite 
 Command 
 Mediator 
 Chain of Responsibilities 
[Node] 
public class TopLevel : IComposite { 
private readonly List<IComponent> items = new List<IComponent>(); 
public void Add(IComponent component) { 
items.Add(component); 
} 
public int Count() { 
return items.Count; 
} 
} 
[Node(Parent = typeof (TopLevel))] 
public class LowLevel2 : IComponent {}
11 
Luxoft Training & GoSharp Conference 2014 
Аспекты кардинально меняют картину 
 Для следующих шаблонов аспекты могут полностью изменить 
процесс использования шаблона: 
 Adapter 
 Decorator 
 Strategy 
 Visitor 
 Proxy 
 Код шаблона выносится в аспект и применяется для всего 
семейства участвующих классов
12 
Luxoft Training & GoSharp Conference 2014 
Аспекты полностью реализуют шаблон 
 Для следующих шаблонов реализация в участниках полностью 
исчезает 
 Observer 
 Для случая INotifyPropertyChange реализация в PostSharp из коробки 
 Memento 
 Реализация в PostSharp из коробки 
 Singleton 
 Prototype 
 Реализация шаблона становится универсальной 
[SingletonClass] 
public class MyClass { 
public int Counter; 
public static MyClass Instance { get; private set; } 
private MyClass() {} 
} 
}
13 
Luxoft Training & GoSharp Conference 2014 
Основные выводы 
 Для 17 из 23 шаблонов возможно применить АОП с 
локализацией кода. 
 Для 12 из 17 можно ядро шаблона выделить в отдельные 
повторно используемые классы. 
 Для 14 из 17 появляется более прозрачная компоновка 
участников шаблона. 
 Знания о применении шаблона не теряется благодаря подсветке 
синтаксиса
14 
Luxoft Training & GoSharp Conference 2014 
Шаблон Локальность Повторное 
использование 
Прозрачность 
компоновки 
Отключаемость 
Façade - - - - 
Abstract Factory Нет Нет Нет Нет 
Bridge Нет Нет Нет Нет 
Builder Нет Нет Нет Нет 
Factory Method Нет Нет Нет Нет 
Interpreter Нет Нет но Нет 
Template Method (Да) Нет Нет (Да) 
Adapter Да Нет Да Да 
State (Да) Нет но (Да) 
Decorator Да Нет Да Да 
Proxy (Да) Нет (Да) (Да) 
Visitor (Да) Да Да (Да) 
Command (Да) Да Да Да 
Composite Да Да Да (Да) 
Iterator Да Да Да Да 
Flyweight Да Да Да Да 
Memento Да Да Да Да 
Strategy Да Да Да Да 
Mediator Да Да Да Да 
Chain of Responsibility Да Да Да Да 
Prototype Да Да (Да) Да 
Singleton Да Да но Да 
Observer Да Да Да Да
15 
Luxoft Training & GoSharp Conference 2014 
Вопросы 
 Приходилось ли использовать в продакшене? 
 Да, приходилось 
 Для чего? 
 Как раз таки для детального трейса фин.операций в системе для этого не 
приспособленной изначально. 
 Тяжело ли его продавить руководству и коллегам? 
 Да, очень тяжело 
 Почему? 
 Сопротивление всему новому в природе человека
16 
Luxoft Training & GoSharp Conference 2014 
Ссылки для самостоятельного изучения 
 Пишем АОП сами http://habrahabr.ru/post/199378/ - для 
самостоятельных 
 Пользуемся готовым – http://www.postsharp.net/ – есть бесплатная 
версия, которая хороша 
 Теория 
 https://www.cs.ubc.ca/labs/spl/papers/2002/oopsla02-patterns.pdf 
 ftp://cs.joensuu.fi/pub/Theses/2008_MSc_Oprisan_Andrei.pdf 
 Мифы и реальность АОП (ажно 15 штук) 
 https://www.ibm.com/developerworks/ru/library/j-aopwork15/
17 
© Luxoft Training 2012 
Спасибо! 
my@violet-tape.net
Luxoft Training & GoSharp Conference 2014 
18

More Related Content

What's hot

GRASP – паттерны Объектно-Ориентированного Проектирования
GRASP – паттерны Объектно-Ориентированного ПроектированияGRASP – паттерны Объектно-Ориентированного Проектирования
GRASP – паттерны Объектно-Ориентированного ПроектированияAlexander Nemanov
 
Java Enterprise without Java
Java Enterprise without JavaJava Enterprise without Java
Java Enterprise without JavaOlena Syrota
 
Software Design Patterns
Software Design PatternsSoftware Design Patterns
Software Design Patterns
Eugene Merkoulov
 
Netpeak Talks #3: Масштабируемое приложение на PHP
Netpeak Talks #3: Масштабируемое приложение на PHPNetpeak Talks #3: Масштабируемое приложение на PHP
Netpeak Talks #3: Масштабируемое приложение на PHP
Образовательные мероприятия "Netpeak Talks"
 
Lektsia 5
Lektsia 5Lektsia 5
Lektsia 5bomfan
 
Семинар ФКН: современные подходы к разработке ПО - часть 2
Семинар ФКН: современные подходы к разработке ПО - часть 2Семинар ФКН: современные подходы к разработке ПО - часть 2
Семинар ФКН: современные подходы к разработке ПО - часть 2
Andrii Gakhov
 
Денис Тучин, Проверка гипотез Kanban Method с помощью имитационной модели
Денис Тучин, Проверка гипотез Kanban Method с помощью имитационной моделиДенис Тучин, Проверка гипотез Kanban Method с помощью имитационной модели
Денис Тучин, Проверка гипотез Kanban Method с помощью имитационной модели
ScrumTrek
 
409bb948 9463-4d6b-b885-63955ea67f1e-210512195958
409bb948 9463-4d6b-b885-63955ea67f1e-210512195958409bb948 9463-4d6b-b885-63955ea67f1e-210512195958
409bb948 9463-4d6b-b885-63955ea67f1e-210512195958
vavaxd
 
Реклама PVS-Studio - статический анализ кода на языке Си и Си++
Реклама PVS-Studio - статический анализ кода на языке Си и Си++Реклама PVS-Studio - статический анализ кода на языке Си и Си++
Реклама PVS-Studio - статический анализ кода на языке Си и Си++
Andrey Karpov
 

What's hot (9)

GRASP – паттерны Объектно-Ориентированного Проектирования
GRASP – паттерны Объектно-Ориентированного ПроектированияGRASP – паттерны Объектно-Ориентированного Проектирования
GRASP – паттерны Объектно-Ориентированного Проектирования
 
Java Enterprise without Java
Java Enterprise without JavaJava Enterprise without Java
Java Enterprise without Java
 
Software Design Patterns
Software Design PatternsSoftware Design Patterns
Software Design Patterns
 
Netpeak Talks #3: Масштабируемое приложение на PHP
Netpeak Talks #3: Масштабируемое приложение на PHPNetpeak Talks #3: Масштабируемое приложение на PHP
Netpeak Talks #3: Масштабируемое приложение на PHP
 
Lektsia 5
Lektsia 5Lektsia 5
Lektsia 5
 
Семинар ФКН: современные подходы к разработке ПО - часть 2
Семинар ФКН: современные подходы к разработке ПО - часть 2Семинар ФКН: современные подходы к разработке ПО - часть 2
Семинар ФКН: современные подходы к разработке ПО - часть 2
 
Денис Тучин, Проверка гипотез Kanban Method с помощью имитационной модели
Денис Тучин, Проверка гипотез Kanban Method с помощью имитационной моделиДенис Тучин, Проверка гипотез Kanban Method с помощью имитационной модели
Денис Тучин, Проверка гипотез Kanban Method с помощью имитационной модели
 
409bb948 9463-4d6b-b885-63955ea67f1e-210512195958
409bb948 9463-4d6b-b885-63955ea67f1e-210512195958409bb948 9463-4d6b-b885-63955ea67f1e-210512195958
409bb948 9463-4d6b-b885-63955ea67f1e-210512195958
 
Реклама PVS-Studio - статический анализ кода на языке Си и Си++
Реклама PVS-Studio - статический анализ кода на языке Си и Си++Реклама PVS-Studio - статический анализ кода на языке Си и Си++
Реклама PVS-Studio - статический анализ кода на языке Си и Си++
 

Similar to Автоматизация design patterns и компактный код вместе с PostSharp

Построение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кодаПостроение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кода
Tatyanazaxarova
 
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПОЕвгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Luxoft Education Center
 
Design Rules And Principles
Design Rules And PrinciplesDesign Rules And Principles
Design Rules And Principles
Evgeniy Krivosheev
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.
Igor Shkulipa
 
Presentation for students about Laravel.pptx
Presentation for students about Laravel.pptxPresentation for students about Laravel.pptx
Presentation for students about Laravel.pptx
GetOverHere
 
Архитектурные решения при создании облачного сервиса на Asp.Net
Архитектурные решения при создании облачного сервиса на Asp.NetАрхитектурные решения при создании облачного сервиса на Asp.Net
Архитектурные решения при создании облачного сервиса на Asp.Net
GoSharp
 
Как начать применять R в Enterprise
Как начать применять R в EnterpriseКак начать применять R в Enterprise
Как начать применять R в Enterprise
Ilya Shutov
 
Frontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковFrontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиков
CodeFest
 
Cтиль программирования
Cтиль программированияCтиль программирования
Cтиль программирования
Constantin Kichinsky
 
Java 2 - Java Intro
Java 2 - Java IntroJava 2 - Java Intro
Java 2 - Java Intro
Alexander Babich
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтенда
Roman Dvornov
 
Как спроектировать хороший API и почему это так важно
Как спроектировать хороший API и почему это так важноКак спроектировать хороший API и почему это так важно
Как спроектировать хороший API и почему это так важно
Bubon Makabra
 
SECON'2014 - Максим Цепков - DDD: от требований до кода
SECON'2014 - Максим Цепков - DDD: от требований до кодаSECON'2014 - Максим Цепков - DDD: от требований до кода
SECON'2014 - Максим Цепков - DDD: от требований до кода
Конференция разработчиков программного обеспечения SECON'2014
 
Inroducing SAP ABAP - Presentation with basics SAP ABAP
Inroducing SAP ABAP - Presentation with basics SAP ABAPInroducing SAP ABAP - Presentation with basics SAP ABAP
Inroducing SAP ABAP - Presentation with basics SAP ABAP
mikhailshurgulaya
 
Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"
Fwdays
 
Yuri Trukhin - Software developement best practices
Yuri Trukhin - Software developement best practicesYuri Trukhin - Software developement best practices
Yuri Trukhin - Software developement best practicesbeloslab
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
IT-Portfolio
 
Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...
Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...
Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...
Ontico
 
Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...
Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...
Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...
Fwdays
 

Similar to Автоматизация design patterns и компактный код вместе с PostSharp (20)

Построение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кодаПостроение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кода
 
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПОЕвгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
 
Design Rules And Principles
Design Rules And PrinciplesDesign Rules And Principles
Design Rules And Principles
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.
 
Presentation for students about Laravel.pptx
Presentation for students about Laravel.pptxPresentation for students about Laravel.pptx
Presentation for students about Laravel.pptx
 
Архитектурные решения при создании облачного сервиса на Asp.Net
Архитектурные решения при создании облачного сервиса на Asp.NetАрхитектурные решения при создании облачного сервиса на Asp.Net
Архитектурные решения при создании облачного сервиса на Asp.Net
 
Как начать применять R в Enterprise
Как начать применять R в EnterpriseКак начать применять R в Enterprise
Как начать применять R в Enterprise
 
Frontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковFrontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиков
 
Cтиль программирования
Cтиль программированияCтиль программирования
Cтиль программирования
 
Refactoring
RefactoringRefactoring
Refactoring
 
Java 2 - Java Intro
Java 2 - Java IntroJava 2 - Java Intro
Java 2 - Java Intro
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтенда
 
Как спроектировать хороший API и почему это так важно
Как спроектировать хороший API и почему это так важноКак спроектировать хороший API и почему это так важно
Как спроектировать хороший API и почему это так важно
 
SECON'2014 - Максим Цепков - DDD: от требований до кода
SECON'2014 - Максим Цепков - DDD: от требований до кодаSECON'2014 - Максим Цепков - DDD: от требований до кода
SECON'2014 - Максим Цепков - DDD: от требований до кода
 
Inroducing SAP ABAP - Presentation with basics SAP ABAP
Inroducing SAP ABAP - Presentation with basics SAP ABAPInroducing SAP ABAP - Presentation with basics SAP ABAP
Inroducing SAP ABAP - Presentation with basics SAP ABAP
 
Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"
 
Yuri Trukhin - Software developement best practices
Yuri Trukhin - Software developement best practicesYuri Trukhin - Software developement best practices
Yuri Trukhin - Software developement best practices
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
 
Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...
Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...
Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...
 
Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...
Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...
Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...
 

More from geekfamilyrussia

Архитектура приложений для мобильных устройств на платформе Windows
Архитектура приложений для мобильных устройств на платформе WindowsАрхитектура приложений для мобильных устройств на платформе Windows
Архитектура приложений для мобильных устройств на платформе Windows
geekfamilyrussia
 
ReSharper: прошлое и будущее
ReSharper: прошлое и будущееReSharper: прошлое и будущее
ReSharper: прошлое и будущее
geekfamilyrussia
 
Программируем быстрее с CodeRush
Программируем быстрее с CodeRushПрограммируем быстрее с CodeRush
Программируем быстрее с CodeRush
geekfamilyrussia
 
Как попасть на следующий уровень карьеры и зарплаты в C#
Как попасть на следующий уровень карьеры и зарплаты в C#Как попасть на следующий уровень карьеры и зарплаты в C#
Как попасть на следующий уровень карьеры и зарплаты в C#
geekfamilyrussia
 
Как попасть в лучшие 5% при прохождении собеседования на удаленную работу в T...
Как попасть в лучшие 5% при прохождении собеседования на удаленную работу в T...Как попасть в лучшие 5% при прохождении собеседования на удаленную работу в T...
Как попасть в лучшие 5% при прохождении собеседования на удаленную работу в T...
geekfamilyrussia
 
Рейтинг навыков .NET-разработчика
Рейтинг навыков .NET-разработчикаРейтинг навыков .NET-разработчика
Рейтинг навыков .NET-разработчика
geekfamilyrussia
 
Средства кросплатформенной разработки. Xamarin и ApperCode
Средства кросплатформенной разработки. Xamarin и ApperCodeСредства кросплатформенной разработки. Xamarin и ApperCode
Средства кросплатформенной разработки. Xamarin и ApperCode
geekfamilyrussia
 
Преимущества создания кроссплатформенных приложений с использованием Phone ga...
Преимущества создания кроссплатформенных приложений с использованием Phone ga...Преимущества создания кроссплатформенных приложений с использованием Phone ga...
Преимущества создания кроссплатформенных приложений с использованием Phone ga...
geekfamilyrussia
 

More from geekfamilyrussia (8)

Архитектура приложений для мобильных устройств на платформе Windows
Архитектура приложений для мобильных устройств на платформе WindowsАрхитектура приложений для мобильных устройств на платформе Windows
Архитектура приложений для мобильных устройств на платформе Windows
 
ReSharper: прошлое и будущее
ReSharper: прошлое и будущееReSharper: прошлое и будущее
ReSharper: прошлое и будущее
 
Программируем быстрее с CodeRush
Программируем быстрее с CodeRushПрограммируем быстрее с CodeRush
Программируем быстрее с CodeRush
 
Как попасть на следующий уровень карьеры и зарплаты в C#
Как попасть на следующий уровень карьеры и зарплаты в C#Как попасть на следующий уровень карьеры и зарплаты в C#
Как попасть на следующий уровень карьеры и зарплаты в C#
 
Как попасть в лучшие 5% при прохождении собеседования на удаленную работу в T...
Как попасть в лучшие 5% при прохождении собеседования на удаленную работу в T...Как попасть в лучшие 5% при прохождении собеседования на удаленную работу в T...
Как попасть в лучшие 5% при прохождении собеседования на удаленную работу в T...
 
Рейтинг навыков .NET-разработчика
Рейтинг навыков .NET-разработчикаРейтинг навыков .NET-разработчика
Рейтинг навыков .NET-разработчика
 
Средства кросплатформенной разработки. Xamarin и ApperCode
Средства кросплатформенной разработки. Xamarin и ApperCodeСредства кросплатформенной разработки. Xamarin и ApperCode
Средства кросплатформенной разработки. Xamarin и ApperCode
 
Преимущества создания кроссплатформенных приложений с использованием Phone ga...
Преимущества создания кроссплатформенных приложений с использованием Phone ga...Преимущества создания кроссплатформенных приложений с использованием Phone ga...
Преимущества создания кроссплатформенных приложений с использованием Phone ga...
 

Автоматизация design patterns и компактный код вместе с PostSharp

  • 1. 1 © Luxoft Training 2012 AOP & Design Patterns Андрей Гордиенков my@violet-tape.net softblog.violet-tape.ru
  • 2. 2 Luxoft Training & GoSharp Conference 2014 Обо мне  Фанат программирования и рассказов о программировании  Ведет свой блог 5+ года: статьи и видео  АОП евангелист  Очень ленив, поэтому ищет пути как писать меньше, а делать больше
  • 3. 3 Luxoft Training & GoSharp Conference 2014 Что такое АОП? Аспе́ ктно-ориенти́ рованное программи́ рование (в дальнейшем АОП) — это методика программирования в рамках классовой парадигмы, основанная на понятии аспекта — блока кода, инкапсулирующего сквозное поведение в составе классов и повторно используемых модулей. Wikibooks Все средства АОП предоставляют средства для выделения сквозной функциональности в отдельную сущность.
  • 4. 4 Luxoft Training & GoSharp Conference 2014 Шаблоны банды четырех  Мировой бестселлер вышел в 1994 году  23 шаблона были разделены на 3 группы:  Создание объектов  Композиция объектов  Поведение объектов  Облегчают понимание и модификацию, но несколько усложняют код
  • 5. 5 Luxoft Training & GoSharp Conference 2014 Применимость АОП  Логирование  Трассировка  Но: – банальные случаи  Применимость гораздо шире!  Например, шаблоны проектирования  Обеспечение уровня доступа к данным
  • 6. 6 Luxoft Training & GoSharp Conference 2014 Применимость АОП – не банальные случаи  Автоматизация инструментирования  Например, расставить другие атрибуты для классов  Реализация GoF шаблонов с помощью АОП  Многие шаблоны можно отделить и применять декларативно  Безопасная работа с многопоточностью  Обработка исключений  Контракты на использование типов данных  UndoRedo  Большая часть примеров использования есть на postsharp.net
  • 7. 7 Luxoft Training & GoSharp Conference 2014 Аспекты не применимы  Façade – не выигрывает от применения аспектов.  Цель шаблона предоставить более удобное API для подсистемы
  • 8. 8 Luxoft Training & GoSharp Conference 2014 Аспекты не играют особенной роли  Неочевидный выигрыш для шаблонов:  State  Interpreter  Аспекты позволяют чуть сильнее локализировать код шаблона.
  • 9. 9 Luxoft Training & GoSharp Conference 2014 Аспекты могут помочь при определенных условиях  Следующие шаблоны используют мощь наследования для достижения целей  Abstract Factory  Factory Method  Template Method  Builder  Bridge  Аспекты могут нести в себе код из абстрактных классов, освобождая место для явного наследования
  • 10. 10 Luxoft Training & GoSharp Conference 2014 Аспекты могут облегчить жизнь  Большая часть поведения, может быть выделена в аспект для следующих шаблонов:  Composite  Command  Mediator  Chain of Responsibilities [Node] public class TopLevel : IComposite { private readonly List<IComponent> items = new List<IComponent>(); public void Add(IComponent component) { items.Add(component); } public int Count() { return items.Count; } } [Node(Parent = typeof (TopLevel))] public class LowLevel2 : IComponent {}
  • 11. 11 Luxoft Training & GoSharp Conference 2014 Аспекты кардинально меняют картину  Для следующих шаблонов аспекты могут полностью изменить процесс использования шаблона:  Adapter  Decorator  Strategy  Visitor  Proxy  Код шаблона выносится в аспект и применяется для всего семейства участвующих классов
  • 12. 12 Luxoft Training & GoSharp Conference 2014 Аспекты полностью реализуют шаблон  Для следующих шаблонов реализация в участниках полностью исчезает  Observer  Для случая INotifyPropertyChange реализация в PostSharp из коробки  Memento  Реализация в PostSharp из коробки  Singleton  Prototype  Реализация шаблона становится универсальной [SingletonClass] public class MyClass { public int Counter; public static MyClass Instance { get; private set; } private MyClass() {} } }
  • 13. 13 Luxoft Training & GoSharp Conference 2014 Основные выводы  Для 17 из 23 шаблонов возможно применить АОП с локализацией кода.  Для 12 из 17 можно ядро шаблона выделить в отдельные повторно используемые классы.  Для 14 из 17 появляется более прозрачная компоновка участников шаблона.  Знания о применении шаблона не теряется благодаря подсветке синтаксиса
  • 14. 14 Luxoft Training & GoSharp Conference 2014 Шаблон Локальность Повторное использование Прозрачность компоновки Отключаемость Façade - - - - Abstract Factory Нет Нет Нет Нет Bridge Нет Нет Нет Нет Builder Нет Нет Нет Нет Factory Method Нет Нет Нет Нет Interpreter Нет Нет но Нет Template Method (Да) Нет Нет (Да) Adapter Да Нет Да Да State (Да) Нет но (Да) Decorator Да Нет Да Да Proxy (Да) Нет (Да) (Да) Visitor (Да) Да Да (Да) Command (Да) Да Да Да Composite Да Да Да (Да) Iterator Да Да Да Да Flyweight Да Да Да Да Memento Да Да Да Да Strategy Да Да Да Да Mediator Да Да Да Да Chain of Responsibility Да Да Да Да Prototype Да Да (Да) Да Singleton Да Да но Да Observer Да Да Да Да
  • 15. 15 Luxoft Training & GoSharp Conference 2014 Вопросы  Приходилось ли использовать в продакшене?  Да, приходилось  Для чего?  Как раз таки для детального трейса фин.операций в системе для этого не приспособленной изначально.  Тяжело ли его продавить руководству и коллегам?  Да, очень тяжело  Почему?  Сопротивление всему новому в природе человека
  • 16. 16 Luxoft Training & GoSharp Conference 2014 Ссылки для самостоятельного изучения  Пишем АОП сами http://habrahabr.ru/post/199378/ - для самостоятельных  Пользуемся готовым – http://www.postsharp.net/ – есть бесплатная версия, которая хороша  Теория  https://www.cs.ubc.ca/labs/spl/papers/2002/oopsla02-patterns.pdf  ftp://cs.joensuu.fi/pub/Theses/2008_MSc_Oprisan_Andrei.pdf  Мифы и реальность АОП (ажно 15 штук)  https://www.ibm.com/developerworks/ru/library/j-aopwork15/
  • 17. 17 © Luxoft Training 2012 Спасибо! my@violet-tape.net
  • 18. Luxoft Training & GoSharp Conference 2014 18

Editor's Notes

  1. Методология АОП была предложена группой инженеров исследовательского центра Xerox PARC под руководством Грегора Кичалеса (Gregor Kiczales). Ими же было разработано аспектно-ориентированное расширение для языка Java, получившее название AspectJ[en] — (2001 год).
  2. Схема шаблонов, сводная
  3. Например, используя советы по смене состояния при определенных действиях
  4. Структурно они все в целом одинаковы. Наследование используется для различения разных, но родственных компонентов. Это уже хорошо сделано в ООП само по себе. Только если вдруг приспичило множественное наследование.
  5. Роли в шаблоне определяются самим шаблоном и полностью отделены от клиентского кода. Это дает больше поле для деятельности в целом.
  6. Опираются на ограничения языка, языковые конструкции. Именно поэтому эти шаблоны могут совсем исчезнуть при возникновении новых технологий или фич языка. АОП как раз такая фича =) тут может быть время для маленького демо.
  7. (**) Locality: “(yes)” means that the pattern is localized in terms of its superimposed roles but the implementation of the remaining defining role is still done using multiple classes (e.g. State classes for the State pattern). In general, (yes) for a desirable property means that some restrictions apply