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

чистый код

Jan 06, 2016

Download

Documents

channer

чистый код. паттерны проектирования. Олег Антонов. Senior Web Developer. MobiDev Corporation. План семинара. ООП и Чистый код Паттерны проектирования Преимущества и недостатки паттернов Применение паттернов Подведение итогов. Признаки плохого кода. дублирование кода; длинный метод; - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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: чистый код

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