Шаблоны проектирования
Цель занятия
История развития паттернов
Первые паттерны
Паттерны
GoF
Паттерны проектирования
Для чего нужны паттерны
Для чего не нужны паттерны
Паттерны
GRASP
Архитектура
Куда поместить логику?
Толстый клиент
Тонкий клиент
Клиент-сервер трехзвенный
Преимущества
MVC
MVC: active vs passive
HMVC
MVVM
PageController
Классификация (по GoF)
Строитель
Синглтон
Фабричный метод
Адаптер
Шаблонный метод
И еще немного
Антипаттерны
Copy and Paste Programming
Spaghetti code
God object
И еще
Александр Пряхин
3.36M

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

1.

О Н Л А Й Н - О Б РА З О В А Н И Е

2.

Меня хорошо слышно
&& видно?
Напишите в чат, если есть проблемы!
Ставьте + если все хорошо

3. Шаблоны проектирования

Александр Пряхин

4. Цель занятия

• Обсудить историю возникновения паттернов
• Рассмотреть подробно несколько примеров
• Поговорить про антипаттерныы

5. История развития паттернов

6. Первые паттерны

7. Паттерны

• Архитектурные
• Дизайн
• Идиомы

8. GoF

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

10. Для чего нужны паттерны

• Проверенные решения
• Стандартизация кода
• Общий словарь (коммуникация)

11. Для чего не нужны паттерны

• Паттерны – не серебряная пуля
• Не стоит пытаться втиснуть паттерны в код
• Ненужное усложнение

12. Паттерны

13. GRASP

• Информационный эксперт
• Low coupling and high cohesion
• Устойчивость к изменениям

14. Архитектура

15. Куда поместить логику?

16. Толстый клиент

+ не так страшен обрыв
связи с сервером
- высокие требования к
производительности и
проблемы с
кроссплатформенностью

17. Тонкий клиент

+ клиент простой, легкий
и нетребовательный к
ресурсам
- высокие требования к
серверу и сети из-за
нагрузок

18. Клиент-сервер трехзвенный

19. Преимущества

20. MVC

21. MVC: active vs passive

Passive
Контроллер становится раздутым и монолитным монстром
Завязка на фреймворк → ухудшение тестируемости и переиспользования
кода
Active
Логика в Модели может быть переиспользуема и лучше тестируется
Контроллер просто связывает Модель с Представлением, не завязывая
логику на фреймворк

22. HMVC

23. MVVM

24. PageController


Единая точка доступа
Характерная часть реализации MVC

25. Классификация (по GoF)

• Порождающие
• Структурные
• Поведенческие
https://github.com/kamranahmedse/design-patterns-for-humans/blob/master/README.md

26. Строитель

27. Синглтон

28. Фабричный метод

29. Адаптер

30. Шаблонный метод

31. И еще немного

• Итератор
• Стратегия
• Наблюдатель
• ActiveRecord vs Repository

32. Антипаттерны

33. Copy and Paste Programming

Решение:
• Отдельный репозиторий и использование его в качестве
внешних зависимостей
• Вынесение кода в библиотеки, утилиты

34. Spaghetti code

Решение
• Статические анализаторы
• Код-ревью
• Рефакторинг

35. God object

Решение
• Использовать принципы разработки SRP и другие
• Рефакторинг

36. И еще


Магические числа
Hardcoding
Сохранение части кода на будущее
Изобретение колеса

37. Александр Пряхин

Email: [email protected]
Telegram: @alex_kex
English     Русский Правила