Каким способом уменьшить связность между модулями в NodeJS?

Pre: Есть несколько модулей - бизнес-сущность (условно) в одном модуле, коннекты и работа с бд в виде MongoDB и redis в другом модуле, Winston с LogStash'ем в третьем и собственно app.js в который это все безобразие собирается. Кодовая база небольшая (порядка 2000 строк, из которых ~20% это НЕ бизнес-логика). ЗЫ.: пока что :)
Цель - сделать прозрачным логгирование и запись в бд изменений бизнес-сущности и в принципе убрать связность к чертям.
Проблема: не хочется вкорячивать код работающий с логгером и с бд в код бизнес-сущности
Возможные решения - я вижу либо pub/sub в том или ином виде (MobX как вариант), observer, mediator или MQ (легковесную если такие вообще есть для ноды, не искал пока что).
Люди, кто как поступает таких ситуациях?
  • Вопрос задан
  • 558 просмотров
Решения вопроса 1
Проблема: не хочется вкорячивать код работающий с логгером и с бд в код бизнес-сущности

Не вижу тут проблемы. Выделите работу с бд и логгером в отдельный модуль и подключайте в свою "бизнес-сущность".
P.S.: MQ тут вообще ни к чему. По-моему вы создаете проблему там, где ее нет.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
mak_ufo
@mak_ufo
Интересно, что ответят другие, но я бы просто взял медиатор, ибо этот паттерн как раз и нужен для того, чтобы связывать модули/фасады друг с другом
Ответ написан
Комментировать
copist
@copist
Empower people to give
В таких небольших проектах плюю на связность и делаю проект дальше.
Модульность - это когда надо чтобы одна часть системы без другой работала.
Тебе база нужна? Без базы сможешь работать? Если не сможешь, то распиливать бессмысленно.
Тебе логер нужен? Без логера сможешь обойтись? Если не сможешь, то аналогично - живи с логером.

Если модули отвязывать, то переходить на DI, события и очереди. Очереди можно в памяти держать, совсем не обязательно отдельно сервис поднимать.

Можно как Yustas Alexu сказал - сделать модуль, который снаружи работает как адаптер к БД, а внутри - смесь адаптера базы, логера и прочих перделок.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
28 мар. 2024, в 18:16
1000 руб./за проект
28 мар. 2024, в 18:15
90000 руб./за проект
28 мар. 2024, в 18:05
5000 руб./за проект