c# - 识别 Facebook 域模型中的实体和值对象

标签 c# java facebook domain-driven-design

如果我要构建一个用户可以仅共享帖子的社交网络,我会将用户建模为实体,而将帖子建模为值对象的集合。

但是,其他用户可以喜欢 Facebook 中的帖子。帖子可以有评论。其他用户也可以喜欢评论。

我一直读到,实体具有我们关心的身份,但值对象则不然。

引入评论和点赞的概念在一定程度上提高了帖子的重要性。现在我需要确定哪个评论与哪个帖子相关。同样,我需要确定哪个用户喜欢哪个帖子或评论。

如果我有 2 个帖子的措辞完全相同“此处有一些虚拟帖子” ,但是第一个被 User1 和 User2 喜欢,而第二个被 User3 和 User4 喜欢,那么我应该得出结论,这些是不同的帖子。但是,仅比较帖子的身份会更容易。

TL;DR

引入与值对象的关系是否会将其提升为实体?

最佳答案

让我们澄清一下:

  • 实体始终有一个 ID,因为您希望识别它们,而不管它们的其他值如何。
  • 值对象(VO)封装了一个值并且是可以互换的,你不关心对象,你只关心值。您使用 VO 而不仅仅是值(假设它不是复合值)的原因是 VO 始终处于有效状态并“保证”您正在使用有效值。

从 VO 到实体没有晋升,他们应该从一开始就对正确的领域概念进行建模。

在您的场景中,帖子、评论和用户始终是实体。帖子没有评论,they are associated with comments喜欢是用户、帖子和评论的用例。

您将拥有一个 LikesTracker 或类似的工具,它将用户的点赞与帖子或评论相关联。

我不同意@Alexey Raga 建议的结构,因为它是错误的(CRUD)建模。首先,User 和 Post 是聚合根,而不是聚合(表示一组上下文相关的概念)。我不明白为什么 Like 应该是 VO,但无论如何,Like 和 Comments 的集合不是 Post 概念定义的一部分,它们不属于那里。

该结构对于读取( View )模型有意义,但对于域模型则不然。

关于c# - 识别 Facebook 域模型中的实体和值对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20568613/

相关文章:

java - "${foo.bar}"和 "#{foo.bar}"有什么区别?

java - install4j 应用程序中的配置文件

ios - Facebook iOS 应用程序用户界面

ios - 将 FB SDK 更新到最新版本不起作用

c# - 在 N 字后换行拆分字符串

c# - 从不同用户( session 室)获取共享日历

c# - Windows Mobile 和 UWP 的其他扩展 - 我应该使用哪个版本

c# - 有没有办法将方法保存在变量中然后稍后调用它?如果我的方法返回不同的类型怎么办?

java - 如果使用 hibernate 条件传递所有主题,如何获取用户?

javascript - 如果用户已经登录,则 Conceal FB 登录按钮