При создании интерфейсных приложений мы можем в конечном итоге перестроить наш монолит с использованием новой, более изящной технологии. Однако никакие модные словечки не спасут нас от последствий строительства монолита.
Нажмите здесь, чтобы опубликовать эту статью в LinkedIn »
Прежде чем мы углубимся в эту статью, я хочу напомнить, насколько важно думать о том, в каком контексте / организации и какой части вашего проекта формируется монолит. В некоторых случаях монолит может быть менее плохой идеей, чем альтернатива.
Организация кода
Итак, вы решили, что хотите создать интерфейсное приложение для своей архитектуры внешнего интерфейса. У вас есть одна команда разработчиков, которая работает над интерфейсом. Как должна выглядеть структура папок проекта?
Организовать файлы по типам файлов довольно просто. В реакции с redux это означает, что у вас будут как минимум папки: действия, редукторы, контейнеры, компоненты. В Angular вы, вероятно, знакомы с другой структурой: компонентной архитектурой, описанной Джоном Папой. Каждый компонент соответствует принципам SOLID.
Организация файлов на основе типов хороша в том смысле, что она устраняет много накладных расходов с точки зрения именования компонентов и организации того, какие файлы какому компоненту принадлежат. Если вы хотите сделать MVP или работать в одной команде разработчиков, это может быть хорошим вариантом.
Работа в масштабируемой среде
Когда вы начинаете работать в более масштабируемой среде с несколькими командами, которые должны работать независимо, над одним и тем же клиентским приложением, это становится более сложной задачей. Вы можете начать разбивать свой проект на разные пакеты, псевдонимы большие компоненты. Важно, чтобы каждый из этих пакетов и его компоненты работали только в ограниченном контексте, который мы знаем из Домен-ориентированного проектирования. Это потому, что это помогает сделать команды менее сплоченными и более автономными, но добавляет некоторые накладные расходы в виде времени при планировании проекта. Однако такое планирование может быть солидным вложением в стабильную скорость разработки и ремонтопригодность на протяжении всего жизненного цикла программного обеспечения.
Невыполнение планирования может привести к гниению кода, снижению скорости разработки и, в конечном итоге, к отказу от всего проекта.
Собираем все вместе
Каждый из пакетов можно рассматривать как микросервис, который можно выпускать отдельно по-разному. Основной проект может с помощью таких инструментов, как Webpack использовать все опубликованные пакеты. Интересный подход реализован в проекте single-spa, который также не зависит от фреймворка. В зависимости от того, что вы делаете, вы можете получить распределенный монолит. Однако различные способы и их соответствующие подводные камни достойны отдельной статьи.