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

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

Чёткое понимание, из каких компонентов состоит ваш код, и как эти компоненты могут взаимодействовать друг с другом, подскажет вам как именно организовать файловую структуру ваших проектов.

Итак, код любого приложения можно разделить на три главных компонента:

Данные

В оригинале, это «факты, относящиеся к событиям», которые я дополняю структурами данных и системой типов. По сути, это любые данные, которыми оперирует код, а также типы описывающие их.

Вычисления

Компоненты, «преобразующие ввод в вывод», также называемые чистыми функциями. Сюда же относятся и презентационные (глупые) UI компоненты.

Действия

Компоненты, которые «влияют на окружающий мир или находятся под его воздействием», также называемые грязными функциями, или функциями с побочными эффектами. К действиям, в том числе, относятся управляющие (умные) UI компоненты.

Дополнительно, каждый компонент можно разделить на две категории:

Платформа

Включает код для работы с базовыми типами данных (объекты, массивы и т.д.) и API платформы. Сюда же попадают и npm пакеты не привязанные к конкретной предметной области, например react.

Предметная область

Включает код отвечающий за описание структуры предметной области, и содержащий ту самую «бизнес логику».

Резюме

Именно действия являются главной причиной выполнения программ, и они же являются источником большинства ошибок. Также важно понимать, что любой код, использующий действия, сам становится действием!

Действия — зона повышенных рисков!

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

— Строго разграничивать код, отвечающий за данные, вычисления и действия;

— Снижать количество кода отвечающего за действия, в пользу вычислений;

— Объединять (логически) связанные действия в одном месте (вспоминаем принцип SRP).

Как структурировать код, а не раскладывать файлы по папкам | Сетка — социальная сеть от hh.ru