Вы находитесь на странице: 1из 37

Архитектура, алгоритмы и паттерны на PHP

Урок 1
Архитектура веб-
приложений
В рамках курса рассмотрим:

● Основные принципы проектирования


● Антипаттерны
● Группы паттернов: порождающие, поведенческие, структурные,
корпоративные
● SPL, оценку сложности алгоритмов
● Поиск и сортировку массивов
● Деревья и рекурсию
На уроке разберём:

● Что такое архитектура ПО и зачем она нужна?


● Какие особенности у веб-приложений с точки зрения
проектирования их архитектуры?
● Что такое MVC?
● HMVC, MVP и MVVM.
Архитектура vs проектирование

Архитектура
Идентифицирует главные компоненты системы и способы их
взаимодействия. Например: выбор фреймворка, стандартов,
протоколов, моделей взаимодействия модулей и т. д.

Проектирование
Процесс создания ПО, также формализует методы написания кода.
Например: планирование и детализация модулей, оптимизация,
спецификация классов и методов и т. д.
Изменения — главный враг программиста
Откуда взялась сложность?

Grady Booch
Откуда взялась сложность?

1. Мир сложен сам по себе.

Grady Booch
Откуда взялась сложность?

1. Мир сложен сам по себе.

2. Трудно управлять процессом разработки.

Grady Booch
Откуда взялась сложность?

1. Мир сложен сам по себе.

2. Трудно управлять процессом разработки.

3. Полная свобода при разработке.

Grady Booch
Откуда взялась сложность?

1. Мир сложен сам по себе.

2. Трудно управлять процессом разработки.

3. Полная свобода при разработке.

4. Беспощадная комбинаторика в больших

дискретных системах.

Grady Booch
Критерии качественного ПО

1. Эффективность.
Критерии качественного ПО

1. Эффективность.
2. Гибкость.
Критерии качественного ПО

1. Эффективность.
2. Гибкость.
3. Расширяемость.
Критерии качественного ПО

1. Эффективность.
2. Гибкость.
3. Расширяемость.
4. Возможность переиспользования.
Критерии качественного ПО

1. Эффективность.
2. Гибкость.
3. Расширяемость.
4. Возможность переиспользования.
5. Тестируемость.
Критерии качественного ПО

1. Эффективность.
2. Гибкость.
3. Расширяемость.
4. Возможность переиспользования.
5. Тестируемость.
6. Сопровождаемость.
Что же такое архитектура ПО?

«Архитектура отражает важные


проектные решения по формированию системы, где
важность определяется стоимостью изменений».

Grady Booch
Что же такое архитектура ПО?

1. Результат декомпозиции.

2. Конструктивные решения в организации


приложения, которые впоследствии
трудно изменить.

Martin Fowler
Клиент-сервер двухзвенный
Куда поместить логику?
«Толстый» клиент

+ не так страшен обрыв


связи с сервером
- высокие требования к
производительности и
проблемы с
кроссплатформенностью
«Тонкий» клиент

+ клиент простой, легкий и


нетребовательный к
ресурсам
- высокие требования к
серверу и сети из-за
нагрузок
Клиент-сервер трёхзвенный
… и почему он победил
MVC: Model — View — Controller
Снова проблема: в какой
компонент поместить бизнес-
логику?
Вариант 1: в Контроллер
(Passive MVC)
Вариант 1: в Контроллер
(Passive MVC)

● Контроллер становится раздутым и


монолитным монстром.

● Завязка на фреймворк → ухудшение


тестируемости и переиспользования кода.
Вариант 2: в Модель
(Active MVC)
Вариант 2: в Модель
(Active MVC)

● Логика в Модели может быть переиспользуема


и лучше тестируется.

● Контроллер просто связывает Модель с


Представлением, не завязывая логику на
фреймворк.
MVP: Model — View — Presenter
MVVM: Model — View —
ViewModel
HMVC: Hierarchical MVC
Типичный новостной сайт
HMVC
Задание
Цель задания — проанализировать и разобраться
со сложным проектом и тем, как взаимодействуют
части системы.

По ссылке
https://github.com/geekbrains-web/architecture вы
найдёте учебный проект — рассмотрите его.
Нарисуйте в произвольной форме схему
взаимодействия классов из папки src этого проекта.
Сгруппируйте и выделите пунктирной линией
компоненты системы (контроллеры, сервисы и
модели).

В практическом задании рассматривать файлы


нужно только из папки src!

Вам также может понравиться