Реализация чистой архитектуры с помощью Nest.JS PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Внедрение чистой архитектуры с помощью Nest.JS

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

Реализация чистой архитектуры с помощью Nest.JS потребует от нас сначала понять, что это за структура и как она работает.

Nest или Nest.JS — это платформа для создания эффективных, масштабируемых приложений Node.js (на стороне сервера), созданных с помощью TypeScript. Он использует Express или Fastify и обеспечивает уровень абстракции, позволяющий разработчикам использовать достаточное количество модулей (сторонних) в своем коде.

Давайте углубимся в то, что представляет собой эта чистая архитектура. 

Ну, вы все, возможно, использовали или, по крайней мере, слышали об архитектуре MVC. MVC означает Модель, Представление, Контроллер. Идея заключается в том, чтобы разделить структуру нашего проекта на 3 разных раздела.

1. Модель: он будет содержать объектный файл, который сопоставляется с отношениями/документами в базе данных.

2. Контроллер: Это обработчик запросов, который отвечает за реализацию бизнес-логики и все операции с данными.

3. Вид: Эта часть будет содержать файлы, связанные с отображением данных, либо файлы HTML, либо некоторые файлы механизма шаблонов.

Чтобы создать модель, нам нужен какой-то инструмент/модуль/библиотека ORM/ODM для ее построения. Например, если вы напрямую используете модуль, скажем, «sequelize», а затем используете его для реализации входа в систему в своем контроллере и делаете свою основную бизнес-логику зависимой от «sequelize». Теперь, в будущем, скажем, через 10 лет, на рынке появится инструмент получше, который вы захотите использовать, но как только вы замените его сиквелом, вам придется изменить множество строк кода, чтобы он не работал. ломать. Кроме того, вам придется еще раз протестировать все функции, чтобы проверить, успешно ли они развернуты, что также может привести к потере драгоценного времени и ресурсов. Чтобы преодолеть эту проблему, мы можем использовать последний принцип SOLID, который является принципом инверсии зависимостей, и технику, называемую внедрением зависимостей, чтобы избежать такого беспорядка.

Все еще в замешательстве? Позвольте мне объяснить подробно.

Итак, принцип инверсии зависимостей говорит простыми словами, что вы создаете свою основную бизнес-логику, а затем строите зависимость вокруг нее. Другими словами, освободите свою основную логику и бизнес-правила от любой зависимости и измените внешние слои таким образом, чтобы они зависели от вашей основной логики, а не от нее зависела ваша логика. Вот что такое чистая архитектура. Он устраняет зависимость от вашей основной бизнес-логики и строит систему вокруг нее таким образом, что создается впечатление, что они зависят от нее, а не она от них.

Давайте попробуем понять это с помощью приведенной ниже диаграммы.

Источник: Конус чистой архитектуры 

Вы можете видеть, что мы разделили нашу архитектуру на 4 слоя:

1. Субъекты: По своей сути сущности — это модели (правила предприятия), которые определяют правила вашего предприятия и сообщают, о чем приложение. Этот слой вряд ли изменится с течением времени и обычно является абстрактным и недоступным напрямую. Например, у каждого приложения есть «пользователь». Все поля, которые пользователь должен хранить, их типы и отношения с другими сущностями будут составлять сущность.

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

3. Контроллеры/шлюзы: Это каналы, которые помогают нам реализовывать варианты использования с использованием внешних инструментов и библиотек с помощью внедрения зависимостей.

4. Внешние инструменты: Все инструменты и библиотеки, которые мы используем для построения нашей логики, будут подпадать под этот слой, например. ORM, электронная почта, шифрование и т. д.

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

Хорошо, теперь вы поняли суть Nest.JS и поняли, как работает чистая архитектура. Теперь возникает вопрос, как эти два связаны?  

Давайте попробуем понять, что такое 3 строительных блока Nest.JS и что делает каждый из них.

  1. Модули: Nest.JS структурирован таким образом, что мы можем рассматривать каждую функцию как модуль. Например, все, что связано с пользователем, такое как модели, контроллеры, DTO, интерфейсы и т. д., может быть отделено как модуль. У модуля есть контроллер и набор провайдеров, которые представляют собой внедряемые функции, такие как сервисы, форм, электронная почта и т. д.
  1. Контроллеры: Контроллеры в Nest.JS — это интерфейсы между сетью и вашей логикой. Они используются для обработки запросов и возврата ответов на клиентскую часть приложения (например, вызов API).
  1. Провайдеры (Услуги): Провайдеры — это встраиваемые сервисы/функции, которые мы можем внедрять в контроллеры и других провайдеров, чтобы обеспечить гибкость и дополнительную функциональность. Они абстрагируются от любой формы сложности и логики.

Обобщить,

  • У нас есть контроллеры, которые действуют как интерфейсы (3-й уровень чистой архитектуры).
  • У нас есть провайдеры, которые могут быть внедрены для обеспечения функциональности (4-й уровень чистой архитектуры: БД, устройства и т. д.).
  • Мы также можем создавать сервисы и репозитории, чтобы определить наш вариант использования (2-й уровень).
  • Мы можем определить наши сущности, используя провайдеров БД (1-й уровень)

Вывод:

Nest.JS — это мощный фреймворк Node.JS и самый известный на сегодняшний день машинописный текст. Теперь, когда вы получили представление об этой структуре, вам должно быть интересно, можем ли мы использовать ее для построения структуры проекта с чистой архитектурой. Что ж, ответ - Да! Абсолютно. Как? Я объясню в следующей серии этой статьи. 

А пока, оставайтесь с нами!

Об авторе:

Джунаид Бхат в настоящее время работает техническим руководителем в Mantra Labs. Он технический энтузиаст, каждый день стремящийся стать лучшим инженером, следуя отраслевым стандартам и ориентируясь на более структурированный подход к решению проблем. 

Читайте наш последний блог: Платформа Golang-Beego и ее приложения

Знания, которые стоит доставить в ваш почтовый ящик

Отметка времени:

Больше от Мантра Лабс