Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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
Design patterns 文件数据库-非规范化参考文献-最佳实践_Design Patterns_Ravendb_Document Database - Fatal编程技术网

Design patterns 文件数据库-非规范化参考文献-最佳实践

Design patterns 文件数据库-非规范化参考文献-最佳实践,design-patterns,ravendb,document-database,Design Patterns,Ravendb,Document Database,哟-这本身不是ravendb的问题-这是另一个设计问题 用于修饰或说明文件数据库 所以我一直在使用非规范化引用,它已经 我刚想到,在很多地方,这使得DDD相当困难 例如,假设我有一个对象,它有一个子集合: List<DenormalizedReference<SomeType>> 列表 此子集合是在父集合与实例关联时创建的 接受列表的重载构造函数 现在-在ctor中,我想从SomeOtherType创建这个列表 正在传入集合-这意味着我需要创建一个新的 SomeTy

哟-这本身不是ravendb的问题-这是另一个设计问题 用于修饰或说明文件数据库

所以我一直在使用非规范化引用,它已经 我刚想到,在很多地方,这使得DDD相当困难

例如,假设我有一个对象,它有一个子集合:

 List<DenormalizedReference<SomeType>>
列表
此子集合是在父集合与实例关联时创建的 接受
列表的重载构造函数

现在-在ctor中,我想从SomeOtherType创建这个列表 正在传入集合-这意味着我需要创建一个新的 SomeType用于每个SomeOtherType

没有将DocumentSession传递到我的域中-我不是 将要做-这不起作用,因为当父AR被保存时,我们 丢失每个子对象的属性(Id和名称除外)

其他人是怎么处理的?

你不能这么做。 或者更确切地说,你不应该那样做

有几种方法可以解决这一问题,通常使用静态网关来获取会话,但问题是这种方法创建了一个延迟加载的集合,并且存在所有这些问题


RavenDB是专门为避免此类问题而设计的。您可以包含项目以避免返回服务器,但您不应该尝试像那样透明地在ID和类型之间移动。

所以使用Includes是实现我需要的最好方法?我认为我并没有通过坚持一些关系概念来真正利用RavenDb的潜力。当您至少为一个更大的域选择完整的ddd/cqrs路由时,就会实现真正的值。你同意吗?是和否。这实际上取决于你有什么类型的环境以及你如何使用它。Includes&id是解决引用问题的一种方法,非规范化引用是另一种方法。他们有不同的成本/收益比率,这取决于我们在做什么和我们如何使用东西