DDD с Moleculer Node.js Framework - PullRequest
0 голосов
/ 09 июня 2019

Меня заинтересовал фреймворк молекулер как управляемый событиями подход к микросервисам Node. Несмотря на то, что это очень гибкая структура с точки зрения db и транспортных адаптеров, а также множества способов ее реализации, в модели как услуге есть кое-что, что мне не подходит, исходя из доменно-управляемого дизайна (DDD) перспектива.

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

Когда я намеревался построить это, я боролся с этой концепцией. Ни в коем случае я не ожидаю доступа к Address вне контекста пользователей. Я верю в DDD, адрес упоминается как объект значения. Например, мне не нужно Address.get(id).

Итак, я подумал, что собираюсь создать служебную папку, в которой будут содержаться модели ORM, относящиеся к Пользователям, и будет предоставлена ​​внутренняя служба для записей Пользователей и отдельный сервер graphql, для которого может быть сшита служба шлюза graphql.

users
|--usersService.js  // write actions only
|--usersGQL.js      // resolves queries to models, mutations to service
|--models 
   |--address.js    // sequelize model
   |--users.js      // sequelize model
   |--index.js      // db connection

Независимо от graphql, есть ли способ реализовать указанную выше структуру папок или люди, использующие молекулярный механизм, считают это неправильным использованием фреймворка?

Из всех примеров молекул, которые я видел, сервис - это отдельный файл, который (в случае сиквелиза) также определяет модель. Он содержит как геттеры, так и сеттеры.

Я бы подумал о том, чтобы предоставлять данные запроса шлюзу отдельно от основного сервиса. Реализация шаблона CQRS с использованием сшивания graphql или federation , вероятно, будет лучшим решением для объединений между службами - возможным решением этой проблемы .

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

...