RavenDB -当我想要引用另一个根聚合时
本文关键字:另一个 引用 我想要 RavenDB | 更新日期: 2023-09-27 18:09:35
我已经使用DDD有一段时间了,所以我对聚合的想法很满意。起初,我确实有麻烦缠绕我的头周围不使用/持久化引用到其他根聚合,但我想我在船上…所以:
- 将根聚合存储为一个文档....检查
- 使用包含不改变或很少改变的属性的非规范化引用....检查
对于我确实想要拥有对另一个根聚合的完整引用的时候,我理解建议我持久化对其ID的引用,并且可以使用RavenDB客户端API的Includes来有效地检索所有实体。
处理数据部分,我还没有看到的是最好的方式来处理这个在我的实体类:
- 有产品和ProductId属性在我的类使用[JsonIgnore]上的产品,以确保它不会得到持久与文档。
- 然后,完整的对象图可以在存储库中粘合在一起(使用API的Includes以提高效率),或者我可以向实体注入一个服务,该服务将惰性地获取Product(可能是N+1命中)
- 在ViewModel中将其粘合在一起。我不喜欢这个想法,因为如果使用不当,我可能会在域中出现意想不到的NULL引用。
- 还有什么我没看到的明显方式吗?
想法吗?
在DDD中至少有两个有效的观点。一些ppl链接根仅通过ID或其他有效键聚合,另一些则使用特定于平台的对其他对象的引用。两者各有利弊。
对于像RavenDb这样的NoSql解决方案,可能最好使用第一种方法,因为第二种方法在技术上是错误的。
您在这里明显违背了推荐的设计,为什么您想要一个引用另一个聚合的Product属性?它给了你什么?