1 / 57

чистый код

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

channer
Download Presentation

чистый код

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. План семинара • ООП и Чистый код • Паттерны проектирования • Преимущества и недостатки паттернов • Применение паттернов • Подведение итогов

  3. Признаки плохого кода • дублирование кода; • длинный метод; • большой класс; • длинный список параметров; • избыточные временные переменные; • классы данных; • несгруппированные данные.

  4. Причины возникновенияплохого кода • Частые изменения в требованиях, противоречащие исходной архитектуре; • недостаточно времени сделать работу качественно; • глупый менеджер/начальник/заказчик и т.д. • Ваш вариант.

  5. Настоящиепричины возникновенияплохого кода • Непрофессионализм • Лень

  6. Закон Леблана «Потом равносильно никогда»

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

  8. Приемы чистого кода • Именование переменных; • правильная работа с функциями; • комментирование кода; • форматирование; • обработка ошибок; • тестирование.

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

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

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

  12. Классификация паттернов • Порождающие (Creational) • Структурные (Structural) • Поведенческие (Behavioral)

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

  14. Виды порождающих паттернов • Абстрактная фабрика (Abstract Factory) • Строитель (Builder) • Фабричный метод (Factory Method) • Прототип (Prototype) • Одиночка (Singleton)

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

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

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

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

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

  20. Плюсы и минусы • Изолирует конкретные классы; • упрощает замену семейств продуктов; • гарантирует сочетаемость продуктов; • поддержать новый вид продуктов трудно.

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

  22. Виды структурных паттернов • Адаптер (Adapter) • Мост (Bridge) • Компоновщик (Composite) • Декоратор (Decorator) • Фасад (Facade) • Приспособленец (Flyweight) • Заместитель (Proxy)

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

  24. Компоновщик

  25. Компоновщик

  26. Компоновщик

  27. Компоновщик

  28. Компоновщик

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

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

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

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

  33. Наблюдатель

  34. Наблюдатель

  35. Наблюдатель

  36. Наблюдатель

  37. Наблюдатель

  38. Наблюдатель

  39. Плюсы и минусы • Абстрактная связанность субъекта и наблюдателя; • поддержка широковещательных коммуникаций; • неожиданные обновления.

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

  41. Принципы инверсии управления • Модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба типа модулей должны зависеть от абстракций; • абстракция не должна зависеть от реализации. Реализация должна зависеть от абстракции.

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

  43. Преимущества внедрения зависимости • Ослабление соединения между классами; • создание кода, который лучше поддается проверке; • упрощение тестирования.

  44. Виды внедрений зависимости • Constructor injection • Setter injection • Interface injection

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

  46. Constructor Injection

  47. Setter Injection

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

  49. IoC-Контейнер

  50. IoC-Контейнер

More Related