Переход от контейнеров к модулям (C4 Level 3)

Продолжительность: 11 мин

В предыдущих уроках мы познакомились с моделью C4 и рассмотрели два её уровня:
System Context Diagram и Container Diagram (Контекстная диаграмма и диаграмма контейнеров).
Эти уровни помогли нам понять, что представляет собой FoodFleet и из каких крупных частей состоит система.

Теперь пришло время приблизиться ещё ближе — к третьему уровню модели C4, где мы разбираем внутреннее устройство контейнера, то есть Фронтенд-приложения FoodFleet.
На этом уровне мы выявляем ключевые строительные блоки приложения, которые C4 называет components. Однако во фронтенд-разработке слово «компонент» обычно ассоциируется с UI-компонентами, поэтому для архитектуры мы будем использовать термин модули.

Что такое модули?

Модули — это верхнеуровневые части приложения, каждая из которых отвечает за отдельную функциональную область.
Если представить FoodFleet как набор мини-приложений внутри одного, то именно модули и являются этими мини-приложениями.

Разбивка на модули — это первый шаг архитектурной декомпозиции.
Она помогает:

  • организовать структуру кода;
  • распределить ответственность между частями приложения;
  • упростить понимание и поддержку проекта;
  • разделить работу между членами команды.

Как определить модули?

Самый простой и практичный способ — посмотреть на маршруты приложения (routes).
Их ещё нет в коде, но мы можем предсказать их структуру, опираясь на UI-спецификацию и требования проекта.

Так мы формируем первый черновой список модулей.
Например, для FoodFleet можно выделить:

  • Home
  • Login
  • Delivery / Pickup
  • Restaurant Profile
  • Menu Item
  • Search
  • Cart

Это не финальный список — названия и структура могут измениться — но он создаёт основу для будущей архитектуры.

Модули не всегда совпадают с сущностями

Иногда модуль и сущность домена совпадают: например, Restaurant может быть и сущностью, и модулем. Но это не правило. Некоторые сущности не становятся модулями, а некоторые модули вообще не являются сущностями.

С другой стороны: Search — важная часть приложения, со своими состояниями, логикой, компонентами. Но «поиск» — это не сущность домена. Это действие. Тем не менее Search — это полноценный модуль.

Модули не обязаны соответствовать маршрутам

Иногда маршрут вложен в другой, но модуль всё равно должен быть отдельным. Например, Menu Item — вложенный маршрут внутри Restaurant. Но объект меню достаточно сложный (у него могут быть опции, модификаторы, категории), чтобы быть самостоятельным модулем. Есть и обратная ситуация: модуль может существовать вне маршрутов. Например, Корзина (Cart) отображается на всех страницах и не имеет своего route, но это один из самых важных модулей приложения.

Как модули взаимодействуют между собой

В идеальном мире мы могли бы назначить каждому разработчику свой модуль, чтобы они работали независимо. Но в реальности модули — не изолированные острова. У них всегда есть зависимости и пересечения.

Например:

  • Модуль Menu Items напрямую связан с Restaurant — без ресторана меню не существует.
  • Модуль Cart зависит от данных ресторанов и блюд.
  • Модуль Search использует сущности из разных других модулей.

Поэтому важно понимать модули не как независимые системы, а как сотрудничающие части одного приложения.

Это платный урок

Купите полный доступ к курсу чтобы просматривать данный контент

Основы архитектуры фронтенда

Изучите основы проектирования современных, высоконагруженных фронтенд-приложений.

3990 Скидка 75%
990

Безопасные платежи обрабатываются сервисом Юкасса

Комментарии

Войдите, чтобы оставить комментарий