Проектирование службы 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 с использованием чистой архитектуры.
Спасибо за прочтение!