2. Зачем нужны шаблоны
• Основная сложность разработки бизнес ПО
- подобрать готовые решения и
шаблоны, заставить все работать вместе и
следить за сложностью (стоимостью)
поддержки.
• Все уже придумано до нас
3. Что такое шаблон ООП
• Шаблон это просто идея взаимодействия
группы объектов (сущностей, классов).
Реализация может быть очень разной
• Шаблоны – это общий язык общения
разработчиков
6. Abstract Factory. Фабрика
• Цель – скрыть тип создаваемого объекта
• Так же известен как Factory / FactoryMethod
• Используется везде
7. Singleton. Синглетон.
НЕ ИСПОЛЬЗОВАТЬ
• Нужен что бы инкапсулировать жизненный
цикл объекта
• Чаще всего используется (или приводит к) для
эмуляции процедурного программирования
• Т.е. в 99% страшное зло
8. Другие порождающие шаблоны
• Prototype
– Для создания дорогих объектов
• Builder
– Когда конструктор становится слишком
сложным (напр. много параметров) и не
имеющим отношения к классу
– Для создания многих похожих объектов подряд
(или клонирования)
10. Adapter
• Предоставляет единый (адаптированный)
интерфейс для нескольких схожих подсистем
• Часто используется там, где есть различные
протоколы интеграции со схожими системами
11. Proxy
• Реализует тот же интерфейс что и
оригинальный объект для прозрачного
добавления какого-нибудь функционала
• Ленивая загрузка, удаленный объект, тесты и
т.п.
12. Facade
• Предоставляет четкий интерфейс множества
подсистем, часто ограничивая сложность подсистем
• Классическое использование – интерфейс к
доменной модели
13. Composite
• Дерево вложенных друг в друга однотипных объектов
• Писать приходится не часто, но очень часто
используется в стандартных фреймворках (особенно UI).
К примеру, XML парсер.
15. Template method
• Мощнейший комплимент наследованию
• Используется повсеместно, для
ограничения нарушения инкапсуляции
наследованием
16. Command
• Абстракция любой операции. Если объединить с
composite, позволяет строить системы абстрактного
выполнения команд группами.
• Уменьшение кол-ва удаленных вызовов, UNDO,
транзакции, TCP/IP пакеты
17. Strategy
• В чем отличие от команды?
• Абстракция конкретного алгоритма, с
параметрами
18. State
• Моделирует объект у которого много разных
состояний
• Упрощает выражение схемы взаимодействия
состояний, ее изменение и расширение
19. Chain of resp. (FilterChain)
• Модель цепочки обработчиков, позволяет
легко добавлять / удалять обработчики
• Обработка HTTP запросов
20. Другие
• Observer (Publisher / Subscriber)
– События – один публикует события, другие
ждут, наблюдают и обрабатывают. В C#
реализовано на уровне языка
• Iterator
– Шаблон организации итератора по коллекции /
объекту. С C# и многих других языках реализовано
по умолчанию (IEnumerable)
• Visitor
– Позволяет «добавить» метод к целой иерархии
(или просто набору) классов. Сложно, но бывает
нужно.
22. Рефакторинг это
• Преобразование существующего кода без
изменения функциональности с целью:
– Сделать его лучше и проще в поддержке
– Сделать возможным добавление каких-то
новых функций
– Иногда решить другие проблемы (напр.
производительности)
23. Запахи кода
• Дублирование кода (Simian)
• Длинные методы (Unix!)
• Большой класс
• Много параметров
• Цикломатическая сложность
• Switch
• Группы данных
• Пустые классы данных
24. Запахи кода
• Много точек изменений по одному поводу
• Очень высокая связность
• Лишний или «на будущее» код
• Глубокие цепочки вызовов в клиентах
• Отказ от наследства
• Комментарии
25. «Научные» принципы
• Single Responsibility
• Open for extension, closed for modification
• Liskov substitution (объекты всегда
заменимы объектами-наследниками)
• Interface segregation (больше специфичных
интерфейсов)
• Depend upon abstractions
26. «Научные» принципы
• Single point of change (единая точка
изменений)
• Separation of concerns (SoC) (разделение
понятий)
• Command-query separation (СQS)
(разделение запросов и команд)
• Единый уровень абстракции
27. Agile принципы
• YAGNI
– You ain’t gonna need it
• KISS
– Keep it stupid simple
• DRY
– Don’t repeat yourself
30. Банальные
• Подвинуть метод
• Подвинуть поле
• Опустить поле / метод вниз / вверх по
иерархии
• Замена магических чисел константами
• Кодов ошибки эксепшенами и прочии и
касающиеся стиля
46. Рефакторинг – это круто
• При наличии тестов / спецификации
• При наличии конкретной цели / юскейза
• 99% рефакторингов – обратимы, нечего
терять
• Рефакторинг поддерживает принципы
YAGNI / KISS
• Полный список рефакторингов -> книга /
сайт (www.refactoring.com), но он
бесконечный
47. Ресурсы
• Приемы объектно-ориентированного
проектирования. Паттерны
проектирования
• Рефакторинг. Улучшение существующего
кода
• Чистый код. Создание, анализ и
рефакторинг
• Google “<Pattern name> pattern” +
картинки)
• Google “<аббревиатура>”
48. Темы для докладов
• AOP
• Kanban / Lean (Карпов)
• SCRUM: Team / ScrumMaster – подробнее
про процесс (DS, Retro, SprintPlan, Demo…)
• Portfolio management, BMG (Alex
Ostervald), Scrum of Scrum
• NoSql БД
• Реализация ООП в Javascript (прототипы)
49. Объявлениея
• В следующий четверг лекции не будет
– www.msteched.ru
• Давайте решать что делать со временем
лекций
• И с лабами, времени остается все меньше
50. Лабы
• Обработка открытых данных
– http://minenergo.gov.ru/activity/statistic/,http://www.fms.gov.ru/about/
ofstat/, http://www.federalspace.ru/main.php?id=10, http://ivan.begtin.
name/2011/10/02/gosuslugijson/
• Индивидуальное задание (для тех, у кого уже есть что
показать)
• Нужно:
– Или наличие БД
– Или наличие веб интерфейса
– Отчет по лабам
• Стажировка (Тестер / Разработчик)
– Нужно знание: C#, MS MVC, MS SQL Server