Как можно применить аспектно ориентированное программирование к шаблонам проектирования. Какие из них становится легче использовать? Какие полностью выносятся в шаблон и больше не являются частью вашей бизнес-логики.
Как создать более чистый код?
- на эти вопросы ответ в презентации.
GraphQL API: Patterns | Андрей Чиж | Zlit TechZlit
Это некий список шаблонов, подходов и рекомендаций при разработке API (включая опыт, ошибки из реальной жизни, как не упустить задел на будущее etc), который можно рассматривать как определенный "code style" для API.
Любая команда в любой компании открывает этот доклад / репозиторий в гитхаб и проектирует крутой API без детских ошибок, с легкой возможностью раcширять функционал и в котором учтены потребности бекенда и фронтенда.
основы ооп на языке C#. часть 1. введение в программированиеYakubovichDA
Основы объектно-ориентированного программирования на языке C#. Часть 1. Введение в программирование.
Рассматривается базовые понятие алгоритмов, блок-схем, объектно-ориентированного программирования на базе платформы .NET Framework.
Основы ооп на языке C#. Часть 2. базовый синтаксис.YakubovichDA
Рассматриваются базовые понятия и конструкции языка C#:
- структура консольного приложения;
- переменные и типы данных;
- арифметические и логические операторы;
- условные вычисления;
- циклы;
- массивы;
- ввод и вывод данных.
Daftar Kabupaten/Kota Peserta Program PPSP 2015infosanitasi
Daftar Kabupaten/Kota Peserta Program PPSP 2015 berdasarkan Surat Keputusan Menteri Dalam Negeri No. 648-565/Kep/Bangda/2014 tentang Penetapan Kabupaten/Kota sebagai Pelaksana Program Percepatan Pembangunan Sanitasi Permukiman (PPSP) Tahun 2015.
GraphQL API: Patterns | Андрей Чиж | Zlit TechZlit
Это некий список шаблонов, подходов и рекомендаций при разработке API (включая опыт, ошибки из реальной жизни, как не упустить задел на будущее etc), который можно рассматривать как определенный "code style" для API.
Любая команда в любой компании открывает этот доклад / репозиторий в гитхаб и проектирует крутой API без детских ошибок, с легкой возможностью раcширять функционал и в котором учтены потребности бекенда и фронтенда.
основы ооп на языке C#. часть 1. введение в программированиеYakubovichDA
Основы объектно-ориентированного программирования на языке C#. Часть 1. Введение в программирование.
Рассматривается базовые понятие алгоритмов, блок-схем, объектно-ориентированного программирования на базе платформы .NET Framework.
Основы ооп на языке C#. Часть 2. базовый синтаксис.YakubovichDA
Рассматриваются базовые понятия и конструкции языка C#:
- структура консольного приложения;
- переменные и типы данных;
- арифметические и логические операторы;
- условные вычисления;
- циклы;
- массивы;
- ввод и вывод данных.
Daftar Kabupaten/Kota Peserta Program PPSP 2015infosanitasi
Daftar Kabupaten/Kota Peserta Program PPSP 2015 berdasarkan Surat Keputusan Menteri Dalam Negeri No. 648-565/Kep/Bangda/2014 tentang Penetapan Kabupaten/Kota sebagai Pelaksana Program Percepatan Pembangunan Sanitasi Permukiman (PPSP) Tahun 2015.
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...IT-Portfolio
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагрузкой, в поисках проблем...", Филипп Дельгядо (CTO Goodwix, ex-teamlead Яндекс.Деньги)
Аннотация
Не так давно с некоторым изумлением узнал, что Java для нагруженных систем представляется совершенной terra incognita. Хотя и совершенно не хочется бороться с мифами, по крайней мере, с удовольствием расскажу, как просто и без хлопот использовать Java в вебе. Про "суровый" highload рассказывать не буду, а вот про простые решения - с удовольствием. Ну и на закуску расскажу, за что я нежно люблю блобы.
О себе
Teamlead сколько себя помню, успел поработать и в "Яндекс.Деньгах" и в "БК Марафон". Люблю простые решения, сложные задачи и хорошую коммуникацию.
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Yandex
Флеш-накопители используются в самых разных устройствах, от мобильных телефонов до компьютеров и серверов. Для каждой модели накопителя нужна прошивка с определённым набором параметров, которые могут отличаться в зависимости от ситуации. В докладе будет описан универсальный фреймфорк на С++, который предоставляет разработчикам симуляторов простой, прозрачный и быстрый доступ к любому параметру. Тестировщикам же он позволяет управлять конфигурациями при помощи стандартных инструментов редактирования и слияния.
Любите ли вы велосипеды? Все разработчики любят свои ненаколеночныерешения велосипеды! И мы не исключение. В нашем докладе мы покажем как собирать, сколачивать, вылепливать собственный велосипед так, чтобы на нем потом могла ездить без слёз вся команда, компания, или может весь мир.
Что в докладе будет:
- много Spring Boot-а;
- live coding;
- создание собственного Spring Boot Starter-а;
- Apache Thrift в качестве подопытного кролика.
Чего не будет:
- бенчмарков и сравнений Thrift vs REST vs gRPC vs XXX.
В 2015 году мы изменили порядок лекций. На первом этапе стажировки задача была делать проекты. И работа шла на результат. Мы не занимались качеством кода и архитектурой.
Это было сделано намеренно, чтобы когда дойдет до лекций о правильном коде, у участников стажировки уже был опыт реального проекта, на который они могут опираться, когда мы говорим о проблемах и о способах их решения.
Построение систем автоматического протоколирования Си/Си++ кодаTatyanazaxarova
Иногда единственным методом отладки является использование протоколирования событий приложения. К недостаткам протоколирования (логирования) можно отнести большой объем кода, который приходится писать вручную для сохранения всей необходимой информации. В статье рассматривается методика, позволяющая построить систему автоматического протоколирования кода на языке Си/Си++.
Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...Ontico
HighLoad++ 2017
Зал «Кейптаун», 7 ноября, 17:00
Тезисы:
http://www.highload.ru/2017/abstracts/2897.html
Нашей группе было поручено создать новый самостоятельный “регион” для всех продуктов New Relic, предназначенный для обслуживания европейских клиентов, подпадающих под ограничения GDPR. Здесь следует отметить, что так как наша компания предоставляла свои услуги исключительно через “облако” (SaaS), то хорошо выработанных процессов для настройки всей инфраструктуры “с нуля” у нас не было.
...
Архитектурные решения при создании облачного сервиса на Asp.NetGoSharp
На конференциях часто рассказывают, как хорошо и удобно разрабатывать облачные приложения на той или иной платформе. Однако при реальной разработке возникают вопросы, которые обычно обходят стороной. В докладе я расскажу с какими неочевидными проблемами столкнулся при разработке сервиса под Microsoft Azure, и каким образом эти проблемы были решены.
Секрет производства: программный продукт, за который не будет стыдноCUSTIS
Открытый семинар для студентов в компании CUSTIS (15 октября 2015 года).
Лектор: Виктор Крапивин, архитектор.
Аннотация: В программном проекте разработчику постоянно приходится работать с унаследованным кодом созданных ранее программ, которые предстоит доделать, исправить или сделать источником примеров в дальнейшей практике. В процессе изучения такого исходного кода программисты часто возмущаются, порой не без оснований заявляя: «Ну кто же так пишет?!». Многочисленные непонятные решения, срочные заплаты для исправления критических ошибок, «костыли» — во всем этом непросто разобраться даже при наличии документации, а ведь иногда она уже не актуальна или ее нет совсем.
Создавая программный продукт, который может «дожить» до промышленной эксплуатации, необходимо помнить, что рано или поздно он попадет в руки программистов, не имеющих отношения к его первоначальной разработке. В ходе этого семинара мы на примерах из мира Java продемонстрируем, как создать этот продукт таким образом, чтобы «потомки» остались довольны.
Видеозапись семинара: https://vimeo.com/142895727.
Есть такая штука как инструментирование кода. Мало кто знает о ней, даже пользуясь результатами ее применения. Между тем, с инструментированием можно делать много всего интересного и, главное, полезного. Например, это может вам помочь лучше понять код или сделать процесс разработки более эффективным. Примеры инструментирования кода и принципы его работы.
На встрече мы поговорим о том, как не бояться изменений и как быть к ним готовым. Дадим определение АОП. Рассмотрим проблемы, хорошо решаемые инструментами АОП. Построим модульную систему, применяя АОП. Сравним динамический и статический подходы в АОП. Дадим рекомендации по применению АОП.
Вас ждет река теории впадающая в море практики.
Similar to Aspect Oriented Programming and Design Patterns (20)
2. 2
2014
Обо мне
Фанат программирования и рассказов о программировании
Ведет свой блог 5+ года: статьи и видео
АОП евангелист
Очень ленив, поэтому ищет пути как писать меньше, а делать больше
3. 3
2014
Что такое АОП?
Аспе́ктно-ориенти́рованное программи́рование —методика программирования
в рамках классовой парадигмы, основанная на понятии аспекта — блока кода,
инкапсулирующего сквозное поведение в составе классов и повторно
используемых модулей.
Wikibooks
Все средства АОП предоставляют средства для выделения
сквозной функциональности в отдельную сущность.
4. 4
2014
Для чего нужен АОП?
ООП отлично себя зарекомендовала для решения доменных задач. Но есть
сопутствующие задачи, которые прошивают все слои и с ними ООП
справляется плохо.
АОП позволяет:
Уменьшить стоимость разработки и время доставки приложения
Сократить количество ошибок в приложении
Увеличить поддерживаемость ПО
Мир Java имеет AspectJ,
в .NET сравнимым функционалом обладает PostSharp
6. 6
2014
Применимость АОП
Логирование
Трассировка
Кэширование
Но:
Применимость гораздо шире!
Например, шаблоны проектирования
Обеспечение уровня доступа к данным
7. 7
2014
Применимость АОП – не банальные случаи
Автоматизация инструментирования
Например, расставить другие атрибуты для классов
Реализация GoF шаблонов с помощью АОП
Многие шаблоны можно отделить и применять декларативно
Безопасная работа с многопоточностью
Обработка исключений
Контракты на использование типов данных
UndoRedo
Много примеров использования есть на postsharp.net
8. 8
2014
Код размещается в сборке SomeLibraryExample, в неймспейсе DTO
Точка внедрения объявляется в AssemblyInfo.cs
Пример на инструментирование кода - до
namespace SomeLibraryExample.DTO {
public class SuperHero {
public string Name { get; set; }
public bool CanFly { get; set; }
public bool IsVillian { get; set; }
}
}
[assembly: AutoDataContract(AttributeTargetTypes = "SomeLibraryExample.DTO.*")]
9. 9
2014
Пример на инструментирование кода - после
namespace OfftopicExample.DTO{
[HasInheritedAttribute(new long[] {-5318251063910080884L})]
[DataContract]
public class SuperHero {
[DataMember]
public string Name {
get { return this.u003CNameu003Ek__BackingField; }
set { this.u003CNameu003Ek__BackingField = value; }
}
[DataMember]
public bool CanFly {
get { return this.u003CCanFlyu003Ek__BackingField; }
set { this.u003CCanFlyu003Ek__BackingField = value; }
}
…
10. 10
2014
Возможности PostSharp
Явное указание точек внедрения
сборка, класс/объект, метод, свойство, поле
Внедрение по шаблону имен
использование wildcards
Инструментирование аспектами на этапе компиляции
Проверка требований на этапе компиляции и в RunTime
Управление порядком применения и наследуемостью аспектов
Дебаг с точками остановки для CompileTime и RunTime
Подсветка точек внедрения в Visual Studio
11. 11
2014
Шаблоны «Банды четырех»
Мировой бестселлер вышел в 1994 году
23 шаблона были разделены на 3 группы:
Создание объектов
Композиция объектов
Поведение объектов
Облегчают понимание и модификацию, но усложняют код. Инфраструктура
внедряется в бизнес-логику.
12. 12
20142014
Аспекты не применимы
Façade – не выигрывает от применения аспектов.
Цель шаблона предоставить более удобное API для подсистемы
13. 13
20142014
Аспекты не играют особенной роли
Неочевидный выигрыш для шаблонов:
State
Interpreter
Аспекты позволяют чуть сильнее локализировать код шаблона.
14. 14
20142014
Аспекты могут помочь при определенных условиях
Следующие шаблоны используют мощь наследования для достижения своих
целей и реализации себя:
Abstract Factory
Factory Method
Template Method
Builder
Bridge
Аспекты могут нести в себе код из абстрактных классов, освобождая место для
явного наследования
15. 15
20142014
Аспекты могут облегчить жизнь
Большая часть поведения, может быть выделена в аспект для следующих
шаблонов:
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 {}
16. 16
20142014
Аспекты кардинально меняют картину
Для следующих шаблонов аспекты могут полностью изменить процесс
использования шаблона:
Adapter
Decorator
Strategy
Visitor
Proxy
Код шаблона выносится в аспект и применяется для всего семейства
участвующих классов
17. 17
20142014
Аспекты полностью реализуют шаблон
Для следующих шаблонов реализация в участниках полностью исчезает
Observer
Memento
Singleton
Prototype
Реализация шаблона становится универсальной
[SingletonClass]
public class MyClass {
public int Counter;
public static MyClass Instance { get; private
set; }
private MyClass() {}
}
}
18. 18
20142014
Проверка структуры кода на этапе компиляции
Проверка структуры на разных уровнях
Сборка, класс, методы
Управление уровнем критичности нарушения структуры
Info, Error, Warning и другие
19. 19
2014
Основные выводы по рефакторингу GoF
Для 17 из 23 шаблонов возможно применить АОП с локализацией кода.
Для 12 из 17 можно ядро шаблона выделить в отдельные повторно
используемые классы.
Для 14 из 17 появляется более прозрачная компоновка участников шаблона.
Знания о применении шаблона не теряются благодаря подсветке синтаксиса
20. 20
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 Да Да Да Да
21. 21
2014
Вопросы
Приходилось ли использовать в продакшене?
Да, приходилось
Для чего?
Как раз таки для детального трейса фин.операций в системе для этого не приспособленной
изначально.
Тяжело ли его продавить руководству и коллегам?
Да, очень тяжело
Почему?
Сопротивление всему новому в природе человека
22. 22
2014
Ссылки для самостоятельного изучения
Примеры AOП решений - http://www.bodden.de/tools/aop-dot-net/
Пишем АОП сами 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/
Примеры кода https://github.com/VioletTape/GoF_PostSharp
Методология АОП была предложена группой инженеров исследовательского центра Xerox PARC под руководством Грегора Кичалеса (Gregor Kiczales). Ими же было разработано аспектно-ориентированное расширение для языка Java, получившее название AspectJ[en] — (2001 год).
Схема шаблонов, сводная
Например, используя советы по смене состояния при определенных действиях
Структурно они все в целом одинаковы. Наследование используется для различения разных, но родственных компонентов. Это уже хорошо сделано в ООП само по себе. Только если вдруг приспичило множественное наследование.Вспомнить об ограничении создания инстансов – приватный конструктор.
Роли в шаблоне определяются самим шаблоном и полностью отделены от клиентского кода. Это дает больше поле для деятельности в целом.
Опираются на ограничения языка, языковые конструкции. Именно поэтому эти шаблоны могут совсем исчезнуть при возникновении новых технологий или фич языка. АОП как раз такая фича =) тут может быть время для маленького демо.
(**) 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