Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
DDD+;node.js:域逻辑应该去哪里_Node.js_Mongodb_Domain Driven Design - Fatal编程技术网

DDD+;node.js:域逻辑应该去哪里

DDD+;node.js:域逻辑应该去哪里,node.js,mongodb,domain-driven-design,Node.js,Mongodb,Domain Driven Design,我正在尝试使用es6将DDD设置到node.js应用程序中。我使用mongoose作为我的数据访问层。我注意到mongoose有一个与模型模式关联的“.methods”属性。在将业务逻辑添加到实体中时,这会是添加业务逻辑的理想场所吗?还是应该考虑创建另一个对象,该对象包含反映模型架构对象的业务逻辑,并将数据从一个复制到另一个?如果我使用sequalize,这里的首选方法是什么?我不认为有确切的答案,但我会给你一些意见 许多与DDD相关的概念和工具都是围绕OOP语言公开的特性构建的(特别是:接口和

我正在尝试使用es6将DDD设置到node.js应用程序中。我使用mongoose作为我的数据访问层。我注意到mongoose有一个与模型模式关联的“.methods”属性。在将业务逻辑添加到实体中时,这会是添加业务逻辑的理想场所吗?还是应该考虑创建另一个对象,该对象包含反映模型架构对象的业务逻辑,并将数据从一个复制到另一个?如果我使用sequalize,这里的首选方法是什么?

我不认为有确切的答案,但我会给你一些意见

许多与DDD相关的概念和工具都是围绕OOP语言公开的特性构建的(特别是:接口和IOC)。在JavaScript世界中,情况往往有点不同,尤其是在利用模块系统时。也就是说,这并非不可能,但可能需要做出妥协


DDD中更重要的一点是,您的模型是“普通的”。它们完全不知道任何持久性机制,等等,它们只是数据和逻辑。通过使用Mongoose定义模型,您几乎失去了这一点;您的业务逻辑正在附加到Mongoose架构对象。但也许这就是你可以妥协的地方,这在很大程度上取决于你希望对它有多纯粹。现在,您可以按照您的建议进行映射。如果你决定继续这个想法,像这样的事情可能会有所帮助。我参与过一个项目,该项目使用了来自的ES7装饰器来实现更简洁的方法(然而,我们没有使用模式)。

对于CRUD,有几种持久性框架更有效。这是我关心的问题。如果我需要切换存储库等,我似乎会创建耦合,这可能是一个问题。因此,更好的方法是创建一个单独的“实体”对象,该对象也包含业务规则,并使用映射器来回移动数据。谢谢你的提醒。