SlideShare ist ein Scribd-Unternehmen logo
1 von 51
Шаблоны ООП. Рефакторинг

  Разработка бизнес приложений
            Лекция 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

Weitere ähnliche Inhalte

Was ist angesagt?

Применение статистических методов и инструментов для анализа производительнос...
Применение статистических методов и инструментов для анализа производительнос...Применение статистических методов и инструментов для анализа производительнос...
Применение статистических методов и инструментов для анализа производительнос...
Ontico
 
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ontico
 
20100228 virtualization igotti_lecture03
20100228 virtualization igotti_lecture0320100228 virtualization igotti_lecture03
20100228 virtualization igotti_lecture03
Computer Science Club
 
django-and-postgresql
django-and-postgresqldjango-and-postgresql
django-and-postgresql
Oleg Churkin
 
Быстрое расширение Robot Framework под свои нужды с использованием Python
Быстрое расширение Robot Framework под свои нужды с использованием PythonБыстрое расширение Robot Framework под свои нужды с использованием Python
Быстрое расширение Robot Framework под свои нужды с использованием Python
automated-testing.info
 
SECON'2017, Неволин Роман, Функциональный C#
SECON'2017, Неволин Роман, Функциональный C#SECON'2017, Неволин Роман, Функциональный C#
SECON'2017, Неволин Роман, Функциональный C#
SECON
 
Сергей Пузанков — XSLT
Сергей Пузанков — XSLTСергей Пузанков — XSLT
Сергей Пузанков — XSLT
Yandex
 
CodeFest 2011. Макаров А. — Как разрабатывается Yii
CodeFest 2011. Макаров А. — Как разрабатывается YiiCodeFest 2011. Макаров А. — Как разрабатывается Yii
CodeFest 2011. Макаров А. — Как разрабатывается Yii
CodeFest
 

Was ist angesagt? (20)

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

Andere mochten auch

Финансовая отчетность в компании разработчике (Александр Горник)
Финансовая отчетность в компании разработчике (Александр Горник)Финансовая отчетность в компании разработчике (Александр Горник)
Финансовая отчетность в компании разработчике (Александр Горник)
Ontico
 

Andere mochten auch (12)

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

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

2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
Nikolay Samokhvalov
 
Netpeak Talks #3: Масштабируемое приложение на PHP
Netpeak Talks #3: Масштабируемое приложение на PHPNetpeak Talks #3: Масштабируемое приложение на PHP
Netpeak Talks #3: Масштабируемое приложение на PHP
Образовательные мероприятия "Netpeak Talks"
 
Test Driven Development in .NET Applications
Test Driven Development in .NET ApplicationsTest Driven Development in .NET Applications
Test Driven Development in .NET Applications
Anton Vidishchev
 
CodeFest 2013. Бурмако Е. — Макросы в Скале
CodeFest 2013. Бурмако Е. — Макросы в СкалеCodeFest 2013. Бурмако Е. — Макросы в Скале
CodeFest 2013. Бурмако Е. — Макросы в Скале
CodeFest
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
IT-Portfolio
 

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

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