Допустимо ли внедрить use-cases в Express.js с архитектурой MVC?
Привет! У меня проект на Express.js устроен по классическому MVC. Контроллеры принимают HTTP‑запрос, вызывают методы из папки services, а сервисы уже выполняют всё необходимое с данными (CRUD, расчёты, запись в БД), также делают валидации и проверки. При этом в сервисах постоянно дублируются одни и те же шаги, по типу проверка регистрации, забанен ли юзер перед выполнением основной логики.
Чтобы убрать повторяющийся код, я хочу добавить слой Use Case. В нём каждая функция (например, createOrder, cancelOrder, addItemToCart) будет проверять пользователя (зарегистрирован ли, забанен ли), вызывать чистые методы сервисов для работы с данными и возвращать результат контроллеру.
Контроллер при этом останется лаконичным: он просто вызовет нужную функцию из Use Case и отправит ответ, а сервисы избавятся от любых проверок. Они получат гарантированно корректные аргументы и займутся только изменением данных.
Был вариант выносить проверки, забанен или зареган юзер, в миддлвари, но как мне говорили туда нельзя пихать бизнес логику. Также, это будет неудобно, если я допустим захочу вызвать метод из сервиса через rabbitmq. Миддлвари просто минуются.
Насколько в Express.js (при архитектуре MVC) приемлем такой подход с выделенным слоем Use Case? Существуют ли устоявшиеся практики для решения подобной задачи, или лучше использовать другой способ, чтобы избежать дублирования логики в сервисах? Заранее спасибо.
tukreb, я как раз и вдохновлялся идеями из книги про чистую архитектуру. Просто хотел уточнить, насколько такой подход применим именно в Express, и как это обычно делают на практике
lorenzo_lavantelli, он применим везде. Фремворк - это просто набор инструментов.
При правильной реализации чистой архитектуры, DDD, и частично SOLID, ваш код станет независим от фремворка, что позволит менять их с минимальными изменениями в коде.