DDD + node.js:领域逻辑应该放在哪里?

3

我正在尝试使用es6将DDD引入到一个基于node.js的应用程序中。我的数据访问层使用mongoose。我注意到mongoose有一个与模型架构相关联的".methods"属性。在向实体添加业务逻辑方面,将此作为添加业务逻辑的理想位置还是应考虑创建另一个对象来保存业务逻辑并镜像模型架构对象,并从一个对象复制数据到另一个对象?如果我使用sequalize,那么这里的首选方法是什么?


这种持久化框架对于CRUD操作更加有效。 - plalx
1个回答

3

我认为这个问题没有一个明确的答案,但我会给你一些观点。

在DDD相关的一些概念和工具中,都是围绕OOP语言(尤其是接口和IOC)所暴露出的特性构建的。在JavaScript世界中,事情往往有所不同,特别是在利用模块系统时。尽管如此,这并非不可能,但可能需要做出一些妥协。

DDD中更重要的一点是,你的模型是“纯粹的”。它们完全不知道任何持久性机制等,它们只是数据和逻辑。通过使用Mongoose定义您的模型,您几乎失去了这一点;您的业务逻辑被附加到Mongoose模式对象上。但也许这就是你可以妥协的地方,这非常取决于你对它的纯粹性有多么坚持。现在,您可以进行映射,正如您所建议的那样。如果您决定采用这个想法,像AutoMapper这样的工具可以帮助您。我曾参与过一个项目,使用cerialize的ES7装饰器进行简洁的方法(但我们当时没有使用模式)。


这是我的担忧。如果我需要切换存储库等,似乎我会创建耦合可能成为问题的情况。因此,更好的方法是创建一个单独的“实体”对象,该对象还包含业务规则,并使用映射器来来回移动数据。感谢您的提醒。 - user1790300

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接