Проектирование службы Node API с использованием чистой архитектуры со скелетом папок

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

Этот момент очень важен! Если мы остановимся и потратим время на планирование, прежде чем начинать этот процесс, в долгосрочной перспективе это будет стоить того.

В этой статье мы сделаем это, создав скелет папок с использованием подхода «Чистая архитектура».

Оглавление

  • Почему архитектура программного обеспечения так важна
  • О чистой архитектуре
  • Служба Node API с чистой архитектурой
  • Скелет папок
  • Краткое содержание

Почему архитектура программного обеспечения так важна

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

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

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

Короче говоря, «Чистая архитектура» — это руководство по архитектуре системы, предложенное Робертом К. Мартином (дядя Боб).

Об этом можно прочитать здесь и здесь и здесь.

Основную концепцию можно показать на иллюстрации Роберта Мартина:

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

Поскольку это немного абстрактно, давайте продемонстрируем, как это выглядит в Node API Service.

Служба Node API с чистой архитектурой

Мы начнем создавать службу Node с API и базой данных.

В чистой архитектуре у нас будут следующие слои:

  • Уровень предметной области — абстрактный уровень, отвечающий за все наши бизнес-данные, наши бизнес-функции и объекты, но абстрактный — интерфейсы и абстрактные классы.
  • Прикладной уровень — уровень логики, здесь каждый файл отвечает за поток или вариант использования в нашем проекте.
  • Уровень адаптера — уровень представления API, включающий маршруты, контроллеры и т. д.
  • Уровень инфраструктуры — конфигурации базы данных, реализации сущностей, поставщиков и т. д.

Скелет папок

Слои разбиты на следующие папки: домен, варианты использования, API и инфраструктура.

Во-первых, давайте посмотрим, как это выглядит для каждой папки:

домен — содержит файлы, такие как перечисления, интерфейсы, модели и т. д.

usecases — содержит файлы логики проекта, потока и вариантов использования.

Каждый файл может представлять собой отдельный поток, например «вариант использования загрузки песни» или вариант использования всех песен.

api — содержит такие файлы, как контроллеры, перехватчики, охранники и т. д.

Здесь мы можем вызвать из контроллера «a», чтобы использовать вариант «a.x» и вариант использования «a.y». Если мы это сделаем, мы создадим зависимость от слоя адаптера к слою приложения. Это нормально, потому что зависимость идет от внешнего слоя к более глубокому слою.

инфраструктура — содержит конфигурации базы данных — реализации табличных сущностей, внешние поставщики, репозитории DAL и т. д.

Здесь мы можем реализовать абстрактные классы, объявленные на уровне предметной области, а также сущности базы данных и ORM.

Теперь у нас есть базовая структура папок для сервиса Node API с использованием чистой архитектуры.

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

Сводка

В этой статье мы изучили основы чистой архитектуры. Сначала мы перевели его в мир Node, а затем продемонстрировали, как создать скелет проекта для сервиса Node API с использованием чистой архитектуры.

Спасибо за прочтение!