我将使用Node.js在我的项目中实现存储库模式,我是DDD的新手,但是我已经阅读了很多内容。我知道存储库模式应该保持简单并处理聚合。
但是我想知道应该如何加载实体关系?在 ORM 中,我们通常渴望加载和延迟加载。但是由于Nodejs异步检索数据,因此我认为不可能进行延迟加载。
我应该将渴望包装在存储库中吗?还是通过参数定义要包含的关系会更好?
例如:
class GenericRepository {
find({ select, where, includes, orderBy }) {
// Code
}
}
如果我定义了这样的方法,那难道不就是重新发明 ORM 函数吗? 请给我您的意见。
谢谢。
答案 0 :(得分:1)
在DDD中,没有诸如延迟加载聚合或其一部分这样的事情。在执行命令之前,必须从存储库中完全加载聚合。如果您觉得在大多数情况下不需要完全加载,则可能是您的聚合边界错误并且您的聚合太大。
关于JavaScript中的聚合存储库,最简单的解决方案是使用像MongoDB这样的文档数据库,该文档数据库按原样保留JavaScript对象,并且转换次数最少。
对于读取(或显示)方案,您只能加载Aggregate的某些属性,但是当您开始依赖于Aggregate内部属性时,请小心不要破坏Aggregate封装。
在CQRS架构中,事情变得更简单(从这个角度来看),因为聚合仅对应于写入模型,并且您可以具有任意数量的完美拟合/优化的读取模型。