Введение
Архитектура - это набор модулей и компонентов системы, описание их разработки и описание связей между этими модулями, включая поддержку интерфейсов, которые опишут предназначение модуля.
Архитектура приложения решает проблемы связей модулей внутри него.
Если мы не думаем над архитектурой приложения, то у нас могут появиться модули, которые невозможно будет удалить без поломки других. Со временем таких неразделимых модулей будет становиться всё больше и больше, что приведёт к более тяжёлой поддержке.
Хаотичные связи между модулями с ростом проекта усложняют поддержку, реакфторинг и добавление нового функционала
Сложность = деньги = время
Цели архитектуры
Цель архитектуры: помочь разработать более поддерживаемое и понятное приложение.
Модули должны обладать:
- Сильной связанностью (решают одну задачу)
- Слабой зацеплённостью (минимальная зависимость от других модулей)
У нас есть таблица, по которой мы можем поделить приложения на несколько вариаций:
- Ideal. Идеальный вариант, к которому архитектура должна привести приложение - это сильная связанность каждого элемента в модуле и слабая зацепленность между разными его модулями (ServiceWorkers нужны для реализации Push, но Push вызывают только определённые компоненты модуля SW, а не являются частью реализации SW)
- God Object. Полный антипаттерн. Все компоненты, классы и функции предоставляют функционал, который реализует сразу всё, а не только выделенный для них функционал
- Destructive Decoupling. Модули бессвязны и слабо сцеплены. То есть какие-то из них выполняют свои задачи, но пакеты одной доменной области раздроблены по проекту.
- Poorly Selected boundaries. Модули одной доменной области перемешаны с другими и по итогу мы получаем связные модули, но со связями из разных областей.
Итоговым результатом должно стать то, что удаление либо изменение модуля должно быть простым
Виды архитектур
-
MVC / MVM / MVVM
-
Чистая архитектура
-
Frontend-архитектуры
-
Реактивная архитектура
-
Уровни архитектуры
- микросервисная (связи между сервисами)
- внутрисервисная архитектура (внутри которой есть свои связи и модули)