设计链接对象
本文关键字:对象 链接 | 更新日期: 2023-09-27 18:13:36
在设计文档时,我通常使用链接文档来定义不同文档类型之间的关系。
类似:
EmailDocument
- Id <
- 主题/gh>
- UserLink
- <
- DisplayName/gh>
- UserId
- Id
- FirstName
- LastName
问题是,如果用户更改了名称,则所有相关文档中都保留了旧名称。链接文档是一种糟糕的方法,还是有一种简单的方法来更新所有这些链接?(我通常创建一个名为User
和一个名为UserLink
的类。UserLink
包含在与用户有关系的所有其他文档中。
不,我不认为这是一个坏方法,因为它在许多情况下会提高性能。但是它确实增加了复杂性,并且要求您有一个策略来在父实体更改时更新名称(User)。
一个常见的设计是公开事件-当事件"UserChangedName"被引发时,你可以有一个监听器来更新所有EmailDocument实例中的所有DisplayName。
如何同步nosql db (ravendb)中的更改
我只是在EmailDocument中存储一个UserId字段,该字段提供对特定User的引用。Raven提供了一个include函数来在当前会话/查询中拉入相关文档,没有(或者至少很少——Raven毕竟是读优化的)额外成本,也没有额外的GET请求。
http://docs.ravendb.net/consumer/querying/handling-document-relationships.htmlvar email = session.Include<EmailDocument>(x => x.UserId)
.Load(id);
var user = session.Load<User>(email.UserId);
这将导致一个GET请求拉入两个文档,并且您还将拥有User文档提供的所有附加信息,您可以从两个对象构建视图模型。您还可以省去跟踪名称更改和在发生更改时更新每个文档的开销。