чистый код

57
чистый код паттерны проектирования Олег Антонов Senior Web Developer MobiDev Corporation

Upload: channer

Post on 06-Jan-2016

63 views

Category:

Documents


1 download

DESCRIPTION

чистый код. паттерны проектирования. Олег Антонов. Senior Web Developer. MobiDev Corporation. План семинара. ООП и Чистый код Паттерны проектирования Преимущества и недостатки паттернов Применение паттернов Подведение итогов. Признаки плохого кода. дублирование кода; длинный метод; - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: чистый код

чистый код

паттерны проектирования

Олег Антонов

Senior Web Developer

MobiDev Corporation

Page 2: чистый код

План семинара

• ООП и Чистый код

• Паттерны проектирования

• Преимущества и недостатки паттернов

• Применение паттернов

• Подведение итогов

Page 3: чистый код

Признаки плохого кода

• дублирование кода;

• длинный метод;

• большой класс;

• длинный список параметров;

• избыточные временные переменные;

• классы данных;

• несгруппированные данные.

Page 4: чистый код

Причины возникновенияплохого кода

• Частые изменения в требованиях, противоречащие

исходной архитектуре;

• недостаточно времени сделать работу

качественно;

• глупый менеджер/начальник/заказчик и т.д.

• Ваш вариант.

Page 5: чистый код

Настоящие причины возникновения

плохого кода

• Непрофессионализм

• Лень

Page 6: чистый код

Закон Леблана

«Потом равносильно никогда»

Page 7: чистый код

Чистый код«Я люблю, чтобы мой код был элегантным и эффективным. Логика должна быть достаточно прямолинейной, чтобы ошибкам было трудно спрятаться; зависимости – минимальными, чтобы упростить сопровождение; обработка ошибок – полной, в соответствии с выбранной стратегией; а производительность – близкой к оптимальной, чтобы не искушать людей загрязнять код беспринципными оптимизациями.»

Бьерн Страуструп

автор языка C++

Page 8: чистый код

Приемы чистого кода

• Именование переменных;

• правильная работа с функциями;

• комментирование кода;

• форматирование;

• обработка ошибок;

• тестирование.

Page 9: чистый код

Объектно-ориентированное проектирование

Проектирование объектно-ориентированных программ – нелегкое дело, а если их нужно использовать повторно, то все становится еще сложнее.

Эрих ГаммаАвтор книги Design Patterns

Page 10: чистый код

Правильный дизайн

Правильный дизайн – это гибкий и пригодный для повторного использования дизайн. Он должен, с одной стороны, соответствовать решаемой задаче, с другой — быть общим, чтобы учесть все требования, которые могут возникнуть в будущем.

Page 11: чистый код

Паттерны проектирования

Паттерн проектирования — повторимая архитектурная конструкция, представляющая собой решение проблемы проектирования в рамках некоторого часто возникающего контекста.

Page 12: чистый код

Классификация паттернов

• Порождающие (Creational)

• Структурные (Structural)

• Поведенческие (Behavioral)  

Page 13: чистый код

Порождающие паттерны

Порождающие паттерны — паттерны проектирования, которые абстрагируют процесс инстанцирования. Они позволяют сделать систему независимой от способа создания, композиции и представления объектов.

Паттерн, порождающий классы, использует наследование, чтобы изменять инстанцируемый класс, а паттерн, порождающий объекты, делегирует инстанцирование другому объекту.

Page 14: чистый код

Виды порождающих паттернов

• Абстрактная фабрика (Abstract Factory)

• Строитель (Builder)

• Фабричный метод (Factory Method)

• Прототип (Prototype)

• Одиночка (Singleton)

Page 15: чистый код

Абстрактная фабрика

Абстрактная фабрика — паттерн, порождающий объекты. Предоставляет интерфейс для создания семейств взаимосвязанных или взаимозависимых объектов не специфицируя их конкретных классов.

Page 16: чистый код

Абстрактная фабрика

Page 17: чистый код

Абстрактная фабрика

Page 18: чистый код

Абстрактная фабрика

Page 19: чистый код

Абстрактная фабрика

Page 20: чистый код

Плюсы и минусы

• Изолирует конкретные классы;

• упрощает замену семейств продуктов;

• гарантирует сочетаемость продуктов;

• поддержать новый вид продуктов трудно.

Page 21: чистый код

Структурные паттерны

Структурные паттерны — паттерны проектирования, в которых рассматривается вопрос о том, как из классов и объектов образуются более крупные структуры.

Page 22: чистый код

Виды структурных паттернов

• Адаптер (Adapter)

• Мост (Bridge)

• Компоновщик (Composite)

• Декоратор (Decorator)

• Фасад (Facade)

• Приспособленец (Flyweight)

• Заместитель (Proxy)

Page 23: чистый код

Компоновщик

Компоновщик — паттерн проектирования, относится к структурным паттернам, объединяет объекты в древовидную структуру для представления иерархии от частного к целому. Компоновщик позволяет клиентам обращаться к отдельным объектам и к группам объектов одинаково.

Page 24: чистый код

Компоновщик

Page 25: чистый код

Компоновщик

Page 26: чистый код

Компоновщик

Page 27: чистый код

Компоновщик

Page 28: чистый код

Компоновщик

Page 29: чистый код

Плюсы и минусы

• Определяет иерархии классов, состоящие из

примитивных и составных объектов;

• упрощает архитектуру клиента;

• облегчает добавление новых видов

компонентов;

• способствует созданию общего дизайна.

Page 30: чистый код

Поведенческие паттерны

Поведенческие паттерны — паттерны проектирования, определяющие алгоритмы и способы реализации взаимодействия различных объектов и классов.

Page 31: чистый код

Виды поведенческих паттернов

• Цепочка обязанностей (Chain of Responsibility)• Команда (Command)• Интерпретатор (Interpreter)• Итератор (Iterator)• Посредник (Mediator)• Хранитель (Memento)• Наблюдатель (Observer)• Состояние (State)• Стратегия (Strategy)• Шаблонный метод (Template Method)• Посетитель (Visitor)

Page 32: чистый код

Наблюдатель

Наблюдатель — поведенческий шаблон проектирования. Определяет зависимость типа «один ко многим» между объектами таким образом, что при изменении состояния одного объекта все зависящие от него оповещаются об этом событии.

Page 33: чистый код

Наблюдатель

Page 34: чистый код

Наблюдатель

Page 35: чистый код

Наблюдатель

Page 36: чистый код

Наблюдатель

Page 37: чистый код

Наблюдатель

Page 38: чистый код

Наблюдатель

Page 39: чистый код

Плюсы и минусы

• Абстрактная связанность субъекта и наблюдателя;

• поддержка широковещательных коммуникаций;

• неожиданные обновления.

Page 40: чистый код

Инверсия управления

Инверсия управления (Inversion of Control) — принцип программирования, который уменьшает связанность между программными компонентами.

Page 41: чистый код

Принципы инверсии управления

• Модули верхнего уровня не должны зависеть от

модулей нижнего уровня. Оба типа модулей

должны зависеть от абстракций;

• абстракция не должна зависеть от реализации.

Реализация должна зависеть от абстракции.

Page 42: чистый код

Внедрение зависимости

Внедрение зависимости (Dependency Injection) — процесс предоставления внешней зависимости программному компоненту. Является специфичной формой «инверсии управления», где изменение порядка связи является путём получения необходимой зависимости.

Page 43: чистый код

Преимущества внедрения зависимости

• Ослабление соединения между классами;

• создание кода, который лучше поддается

проверке;

• упрощение тестирования.

Page 44: чистый код

Виды внедрений зависимости

• Constructor injection

• Setter injection

• Interface injection

Page 45: чистый код

Без внедрения зависимости

Page 46: чистый код

Constructor Injection

Page 47: чистый код

Setter Injection

Page 48: чистый код

IoC-Контейнер

IoC-контейнер — это класс, библиотека или фреймворк, который позволит упростить и автоматизировать написание кода с использованием подхода инверсии управления.

Page 49: чистый код

IoC-Контейнер

Page 50: чистый код

IoC-Контейнер

Page 51: чистый код

IoC-Контейнер

Page 52: чистый код

Вывод

Применяйте паттерны проектирования

Page 53: чистый код

Заблуждение №1

Паттерны гарантируют возможность повторного использования

программного обеспечения, повышение производительности, отсутствие

разногласий и т.д.

Page 54: чистый код

Заблуждение №2

Паттерны предоставляют готовые архитектурные

решения

Page 55: чистый код

Заблуждение №3

Паттерны предназначены для объектно-ориентированного

проектирования и реализации

Page 56: чистый код

Преимущества паттернов проектирования

• Использование предыдущего опыта экспертов.

• Улучшение взаимопонимания разработчиков.

• Альтернатива документации приложений.

• Упрощение реструктуризации системы.

Page 57: чистый код

Спасибо за внимание