SlideShare a Scribd company logo
Шаблоны ООП. Рефакторинг

  Разработка бизнес приложений
            Лекция 7
Зачем нужны шаблоны
• Основная сложность разработки бизнес ПО
  - подобрать готовые решения и
  шаблоны, заставить все работать вместе и
  следить за сложностью (стоимостью)
  поддержки.
• Все уже придумано до нас
Что такое шаблон ООП
• Шаблон это просто идея взаимодействия
  группы объектов (сущностей, классов).
  Реализация может быть очень разной
• Шаблоны – это общий язык общения
  разработчиков
ШАБЛОНЫ ООП
ПРОЕКТИРОВАНИЯ
ПОРОЖДАЮЩИЕ ШАБЛОНЫ
Abstract Factory. Фабрика




• Цель – скрыть тип создаваемого объекта
• Так же известен как Factory / FactoryMethod
• Используется везде
Singleton. Синглетон.

      НЕ ИСПОЛЬЗОВАТЬ




• Нужен что бы инкапсулировать жизненный
  цикл объекта
• Чаще всего используется (или приводит к) для
  эмуляции процедурного программирования
• Т.е. в 99% страшное зло
Другие порождающие шаблоны
• Prototype
  – Для создания дорогих объектов
• Builder
  – Когда конструктор становится слишком
    сложным (напр. много параметров) и не
    имеющим отношения к классу
  – Для создания многих похожих объектов подряд
    (или клонирования)
СТРУКТУРНЫЕ ШАБЛОНЫ
Adapter




• Предоставляет единый (адаптированный)
  интерфейс для нескольких схожих подсистем
• Часто используется там, где есть различные
  протоколы интеграции со схожими системами
Proxy




• Реализует тот же интерфейс что и
  оригинальный объект для прозрачного
  добавления какого-нибудь функционала
• Ленивая загрузка, удаленный объект, тесты и
  т.п.
Facade




• Предоставляет четкий интерфейс множества
  подсистем, часто ограничивая сложность подсистем
• Классическое использование – интерфейс к
  доменной модели
Composite




• Дерево вложенных друг в друга однотипных объектов
• Писать приходится не часто, но очень часто
  используется в стандартных фреймворках (особенно UI).
  К примеру, XML парсер.
ПОВЕДЕНЧЕСКИЕ ШАБЛОНЫ
Template method




• Мощнейший комплимент наследованию
• Используется повсеместно, для
  ограничения нарушения инкапсуляции
  наследованием
Command




• Абстракция любой операции. Если объединить с
  composite, позволяет строить системы абстрактного
  выполнения команд группами.
• Уменьшение кол-ва удаленных вызовов, UNDO,
  транзакции, TCP/IP пакеты
Strategy




• В чем отличие от команды?
• Абстракция конкретного алгоритма, с
  параметрами
State




• Моделирует объект у которого много разных
  состояний
• Упрощает выражение схемы взаимодействия
  состояний, ее изменение и расширение
Chain of resp. (FilterChain)




• Модель цепочки обработчиков, позволяет
  легко добавлять / удалять обработчики
• Обработка HTTP запросов
Другие
• Observer (Publisher / Subscriber)
   – События – один публикует события, другие
     ждут, наблюдают и обрабатывают. В C#
     реализовано на уровне языка
• Iterator
   – Шаблон организации итератора по коллекции /
     объекту. С C# и многих других языках реализовано
     по умолчанию (IEnumerable)
• Visitor
   – Позволяет «добавить» метод к целой иерархии
     (или просто набору) классов. Сложно, но бывает
     нужно.
РЕФАКТОРИНГ
Рефакторинг это
• Преобразование существующего кода без
  изменения функциональности с целью:
  – Сделать его лучше и проще в поддержке
  – Сделать возможным добавление каких-то
    новых функций
  – Иногда решить другие проблемы (напр.
    производительности)
Запахи кода
•   Дублирование кода (Simian)
•   Длинные методы (Unix!)
•   Большой класс
•   Много параметров
•   Цикломатическая сложность
•   Switch
•   Группы данных
•   Пустые классы данных
Запахи кода
•   Много точек изменений по одному поводу
•   Очень высокая связность
•   Лишний или «на будущее» код
•   Глубокие цепочки вызовов в клиентах
•   Отказ от наследства
•   Комментарии
«Научные» принципы
• Single Responsibility
• Open for extension, closed for modification
• Liskov substitution (объекты всегда
  заменимы объектами-наследниками)
• Interface segregation (больше специфичных
  интерфейсов)
• Depend upon abstractions
«Научные» принципы
• Single point of change (единая точка
  изменений)
• Separation of concerns (SoC) (разделение
  понятий)
• Command-query separation (СQS)
  (разделение запросов и команд)
• Единый уровень абстракции
Agile принципы
• YAGNI
  – You ain’t gonna need it
• KISS
  – Keep it stupid simple
• DRY
  – Don’t repeat yourself
НЕКОТОРЫЕ РЕФАКТОРИНГИ
Инкапсуляция поля
Банальные
• Подвинуть метод
• Подвинуть поле
• Опустить поле / метод вниз / вверх по
  иерархии
• Замена магических чисел константами
• Кодов ошибки эксепшенами и прочии и
  касающиеся стиля
Самый важный
И дальше – объект параметр
Потом инкапсуляция всего




• А также полей, методов и всего остального
Метод -> объект
Switch -> полиморфизм
Тип объекта -> наследование
Тип объекта -> state / strategy
Выделить класс (и наоборот)
Выделить наследника (и наоборот)
Выделить базовый класс (и обратно)
Выделить template метод
Выделить интерфейс
Наследование -> композиция
Null объект
UI –> Model / UI
Рефакторинг – это круто
• При наличии тестов / спецификации
• При наличии конкретной цели / юскейза
• 99% рефакторингов – обратимы, нечего
  терять
• Рефакторинг поддерживает принципы
  YAGNI / KISS
• Полный список рефакторингов -> книга /
  сайт (www.refactoring.com), но он
  бесконечный
Ресурсы
• Приемы объектно-ориентированного
  проектирования. Паттерны
  проектирования
• Рефакторинг. Улучшение существующего
  кода
• Чистый код. Создание, анализ и
  рефакторинг
• Google “<Pattern name> pattern” +
  картинки)
• Google “<аббревиатура>”
Темы для докладов
• AOP
• Kanban / Lean (Карпов)
• SCRUM: Team / ScrumMaster – подробнее
  про процесс (DS, Retro, SprintPlan, Demo…)
• Portfolio management, BMG (Alex
  Ostervald), Scrum of Scrum
• NoSql БД
• Реализация ООП в Javascript (прототипы)
Объявлениея
• В следующий четверг лекции не будет
  – www.msteched.ru
• Давайте решать что делать со временем
  лекций
• И с лабами, времени остается все меньше
Лабы
• Обработка открытых данных
   – 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
Использованные материалы
• Никита Филлипов (www.ScrumTrek.ru)
  – Курс SCPO Msk (31.08.11)
• Бочков Илья (Архитектура корпоративных
  приложений, МИФИ)
• MIT: electrical-engineering-and-computer-
  science
  – http://ocw.mit.edu/courses/#electrical-
    engineering-and-computer-science

More Related Content

PPTX
разработка бизнес приложений (6)
PPTX
Грязная автоматизация
PDF
Визуализация покрытия автоматизированными UI тестами
PPTX
Functional reactive full stack development in java/js (JPoint ed.)
ODP
Java 9 - кратко о новом
PDF
Methods for building dialog agents and the technologies we used
ODP
Java: вчера, сегодня, завтра
PDF
01-Hibernate. Понятие ORM-JPA
разработка бизнес приложений (6)
Грязная автоматизация
Визуализация покрытия автоматизированными UI тестами
Functional reactive full stack development in java/js (JPoint ed.)
Java 9 - кратко о новом
Methods for building dialog agents and the technologies we used
Java: вчера, сегодня, завтра
01-Hibernate. Понятие ORM-JPA

What's hot (20)

PDF
Жизнь в изоляции
PDF
Применение статистических методов и инструментов для анализа производительнос...
PDF
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
PDF
20100228 virtualization igotti_lecture03
PDF
C++ STL & Qt. Занятие 11.
PPTX
django-and-postgresql
PDF
Быстрое расширение Robot Framework под свои нужды с использованием Python
PDF
Performance Test Driven Development (CEE SERC 2013 Moscow)
PPTX
SECON'2017, Неволин Роман, Функциональный C#
ODP
Java 9 - Back to the Future
PPTX
Нейронечёткая классификация слабо формализуемых данных | Тимур Гильмуллин
PDF
C++ STL & Qt. Занятие 10.
PDF
Сергей Пузанков — XSLT
PDF
CodeFest 2011. Макаров А. — Как разрабатывается Yii
PPTX
Coding like a sex
PPT
Введение в язык программирования «Java»
PDF
C++ STL & Qt. Занятие 08.
PDF
PostSharp - Threading Model
PPTX
PostSharp - Threading Model Library
PPTX
Технологии анализа бинарного кода приложений: требования, проблемы, инструменты
Жизнь в изоляции
Применение статистических методов и инструментов для анализа производительнос...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
20100228 virtualization igotti_lecture03
C++ STL & Qt. Занятие 11.
django-and-postgresql
Быстрое расширение Robot Framework под свои нужды с использованием Python
Performance Test Driven Development (CEE SERC 2013 Moscow)
SECON'2017, Неволин Роман, Функциональный C#
Java 9 - Back to the Future
Нейронечёткая классификация слабо формализуемых данных | Тимур Гильмуллин
C++ STL & Qt. Занятие 10.
Сергей Пузанков — XSLT
CodeFest 2011. Макаров А. — Как разрабатывается Yii
Coding like a sex
Введение в язык программирования «Java»
C++ STL & Qt. Занятие 08.
PostSharp - Threading Model
PostSharp - Threading Model Library
Технологии анализа бинарного кода приложений: требования, проблемы, инструменты
Ad

Viewers also liked (12)

PPTX
Финансовая отчетность в компании разработчике (Александр Горник)
PPTX
Разработка бизнес приложений (5)
PPTX
как нанять и сделать счастливыми хороших программистов и других сотрудников
PPTX
Когда проектов больше чем людей - процесс разработки в маленькой, но амбициоз...
PPTX
разработка бизнес приложений (9)
PPTX
разработка бизнес приложений (8)
PPTX
Разработка бизнес приложений (3)
PPTX
Разработка корпоративных (бизнес) приложений (лекция 1)
PPTX
Разработка бизнес приложений (4)
PDF
Процесс Mindbox 2015
PPTX
Разработка корпоративных (бизнес) приложений (лекция 2)
PDF
Stop starting start finishing
Финансовая отчетность в компании разработчике (Александр Горник)
Разработка бизнес приложений (5)
как нанять и сделать счастливыми хороших программистов и других сотрудников
Когда проектов больше чем людей - процесс разработки в маленькой, но амбициоз...
разработка бизнес приложений (9)
разработка бизнес приложений (8)
Разработка бизнес приложений (3)
Разработка корпоративных (бизнес) приложений (лекция 1)
Разработка бизнес приложений (4)
Процесс Mindbox 2015
Разработка корпоративных (бизнес) приложений (лекция 2)
Stop starting start finishing
Ad

Similar to разработка бизнес приложений (7) (20)

PPTX
SOLID Principles in the real world
PDF
PPTX
2014.12.23 Александр Андреев, Parallels
PDF
PDF
Netpeak Talks #3: Масштабируемое приложение на PHP
PPT
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
PDF
InterSystems Community and Projects in CIS November 2015
PPTX
Test Driven Development in .NET Applications
PPTX
MagicPlot @ UXSPb @ IT Global Meetup #7
PDF
DDD Workshop
PPTX
Deep storm presentation
PDF
CodeFest 2013. Бурмако Е. — Макросы в Скале
PPTX
Как пройти собеседование и получить первую работу на Swift
PDF
Архитектура в Agile: слабая связность
PPTX
Лучшие практики на практике
PPTX
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
ODP
Refactoring
PPTX
JavaScript design patterns overview
PDF
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PPTX
#ITsubbotnik Spring 2017: Sergey Chernolyas "JPA for NoSQL"
SOLID Principles in the real world
2014.12.23 Александр Андреев, Parallels
Netpeak Talks #3: Масштабируемое приложение на PHP
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
InterSystems Community and Projects in CIS November 2015
Test Driven Development in .NET Applications
MagicPlot @ UXSPb @ IT Global Meetup #7
DDD Workshop
Deep storm presentation
CodeFest 2013. Бурмако Е. — Макросы в Скале
Как пройти собеседование и получить первую работу на Swift
Архитектура в Agile: слабая связность
Лучшие практики на практике
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
Refactoring
JavaScript design patterns overview
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
#ITsubbotnik Spring 2017: Sergey Chernolyas "JPA for NoSQL"

разработка бизнес приложений (7)

  • 1. Шаблоны ООП. Рефакторинг Разработка бизнес приложений Лекция 7
  • 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. Банальные • Подвинуть метод • Подвинуть поле • Опустить поле / метод вниз / вверх по иерархии • Замена магических чисел константами • Кодов ошибки эксепшенами и прочии и касающиеся стиля
  • 32. И дальше – объект параметр
  • 33. Потом инкапсуляция всего • А также полей, методов и всего остального
  • 36. Тип объекта -> наследование
  • 37. Тип объекта -> state / strategy
  • 38. Выделить класс (и наоборот)
  • 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
  • 51. Использованные материалы • Никита Филлипов (www.ScrumTrek.ru) – Курс SCPO Msk (31.08.11) • Бочков Илья (Архитектура корпоративных приложений, МИФИ) • MIT: electrical-engineering-and-computer- science – http://ocw.mit.edu/courses/#electrical- engineering-and-computer-science