Введение

Архитектура - это набор модулей и компонентов системы, описание их разработки и описание связей между этими модулями, включая поддержку интерфейсов, которые опишут предназначение модуля.

Архитектура приложения решает проблемы связей модулей внутри него.

Если мы не думаем над архитектурой приложения, то у нас могут появиться модули, которые невозможно будет удалить без поломки других. Со временем таких неразделимых модулей будет становиться всё больше и больше, что приведёт к более тяжёлой поддержке.

Хаотичные связи между модулями с ростом проекта усложняют поддержку, реакфторинг и добавление нового функционала

Сложность = деньги = время

Цели архитектуры

Цель архитектуры: помочь разработать более поддерживаемое и понятное приложение.

Модули должны обладать:

  • Сильной связанностью (решают одну задачу)
  • Слабой зацеплённостью (минимальная зависимость от других модулей)

У нас есть таблица, по которой мы можем поделить приложения на несколько вариаций:

  • Ideal. Идеальный вариант, к которому архитектура должна привести приложение - это сильная связанность каждого элемента в модуле и слабая зацепленность между разными его модулями (ServiceWorkers нужны для реализации Push, но Push вызывают только определённые компоненты модуля SW, а не являются частью реализации SW)
  • God Object. Полный антипаттерн. Все компоненты, классы и функции предоставляют функционал, который реализует сразу всё, а не только выделенный для них функционал
  • Destructive Decoupling. Модули бессвязны и слабо сцеплены. То есть какие-то из них выполняют свои задачи, но пакеты одной доменной области раздроблены по проекту.
  • Poorly Selected boundaries. Модули одной доменной области перемешаны с другими и по итогу мы получаем связные модули, но со связями из разных областей.

Итоговым результатом должно стать то, что удаление либо изменение модуля должно быть простым

Виды архитектур

  • MVC / MVM / MVVM

  • Чистая архитектура

  • Onion Architecture

  • Frontend-архитектуры

  • Реактивная архитектура

  • Уровни архитектуры

    • микросервисная (связи между сервисами)
    • внутрисервисная архитектура (внутри которой есть свои связи и модули)

4 items under this folder.