使用Moleculer Node.js框架进行DDD

时间:2019-06-09 15:25:45

标签: node.js graphql domain-driven-design microservices moleculer

我对moleculer框架感兴趣,这是一种事件驱动的Node微服务方法。尽管就数据库和传输适配器而言,这是一个非常灵活的框架-以及实现它的多种方式,但对于模型即服务而言,有些东西对我来说似乎并不适合来自域驱动设计(DDD)视角。

说我有“用户”和“地址”实体。现在,如果我知道只有用户可以拥有一个地址,那么我将不明白为什么地址必须是其自己的服务。当然,如果以后添加一个也可能有一个地址的Company实体,这可能是有道理的-但请说我肯定不会发生。

当我着手建立这个构想时,我为这个概念而苦苦挣扎。在任何情况下,我都不希望在用户上下文之外访问地址。我相信在DDD中,Address称为值对象。例如,我不需要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是什么,有没有办法实现上述文件夹结构,或者使用Molecularr的人们是否认为这是对框架的滥用?

从我所看到的所有Molecularr示例中,服务是一个文件(在序列化的情况下)也定义了模型。它包含吸气剂和吸气剂。

我的想法是从与主服务不同的服务向网关提供查询数据。使用graphql缝合或federation实现CQRS模式可能是跨服务联接的最佳解决方案-这是issue的可能解决方案。

从其他服务获取(读取动作)的服务也不应注册为域事件,也不应经常发生。这就引出了另一个问题-如何在Molecularr中实现传奇(有状态,可还原,跨服务交易)?

0 个答案:

没有答案