Nodejs中的存储库模式

时间:2018-07-24 11:52:19

标签: node.js domain-driven-design

我将使用Node.js在我的项目中实现存储库模式,我是DDD的新手,但是我已经阅读了很多内容。我知道存储库模式应该保持简单并处理聚合。

但是我想知道应该如何加载实体关系?在 ORM 中,我们通常渴望加载和延迟加载。但是由于Nodejs异步检索数据,因此我认为不可能进行延迟加载。

我应该将渴望包装在存储库中吗?还是通过参数定义要包含的关系会更好?

例如:

class GenericRepository {
  find({ select, where, includes, orderBy }) {
    // Code
  }
}

如果我定义了这样的方法,那难道不就是重新发明 ORM 函数吗? 请给我您的意见。

谢谢。

1 个答案:

答案 0 :(得分:1)

在DDD中,没有诸如延迟加载聚合或其一部分这样的事情。在执行命令之前,必须从存储库中完全加载聚合。如果您觉得在大多数情况下不需要完全加载,则可能是您的聚合边界错误并且您的聚合太大。

关于JavaScript中的聚合存储库,最简单的解决方案是使用像MongoDB这样的文档数据库,该文档数据库按原样保留JavaScript对象,并且转换次数最少。

对于读取(或显示)方案,您只能加载Aggregate的某些属性,但是当您开始依赖于Aggregate内部属性时,请小心不要破坏Aggregate封装。

在CQRS架构中,事情变得更简单(从这个角度来看),因为聚合仅对应于写入模型,并且您可以具有任意数量的完美拟合/优化的读取模型。