如何识别实体,ValueObjects和集料在DDD模式的具体项目?

问题描述 投票:0回答:1

我正在开发使用DDD模式的网上求职门户网站。有迹象表明,我已经想通了,喜欢的用户,工作,角色,专长,ExperienceRange,国家,省份,城市,地址,订阅等许多“对象”

我的问题是我如何找出其中哪些是实体或值对象或聚合?请咨询我,如果你曾经面临同样的困境。

我已经做了以下决定:

实体 - 用户,工作,SubscriptionPackage ValueObjects - 角色,专长,ExperienceRange,市,省,国家

我知道,我们不应该去想持久性,而这样做DDD造型,但无疑已经浮出水面取其值对象在数据库中,我很存储应该有一个id或不?

如果他们有一个ID他们不违背价值目标的基本原则,如果我们不将它们与IDS保存那么如何引用它们的外键字段?

请帮我解答这些疑问。

如果你可以建议将上述对象是实体,是值对象,哪些是聚集,这将是巨大的。

感谢提前

domain-driven-design clean-architecture
1个回答
2
投票

当DDD的思想,离开了DB映射到后期阶段。我知道我重复你说的话,而是因为它是真实的。值对象可能有其他原因(标准化,报表等),一个DB ID。

首先拿出你的对象模型,然后找出如何映射。在一些(罕见)情况下,你可能需要,如果有东西是太贵了正确映射(我想不出一个例子,但我并不想成为极端主义)稍微改变你的对象模型。

那么一次,忘了DB - 想想对象。是什么原因没有实体有一个ID?我会说这样的话以后可以检索和修改,同时保持相同的ID。而如果是一个VO是因为身份是对象的值隐含的。是否有意义的用户有一个ID?怎么样的地址?或城市?...这要看情况。

为了让城市值对象的例子,如果你需要映射,作为FK为“城市的表,那么你的城市对象将可能有一个ID,但ID不会暴露。这是实施的细节。当用户ID将被暴露。例如,一个城市可能会被链接到一个省/州和一个国家。

但在另一个应用程序,用户可以添加城市和相关信息。其中,城市可能是一个实体,甚至一个聚合。这真的取决于你的需求。

说了这么多,您所提供的实体和虚拟组织的名单看起来在一般的方式确定,但我不知道您的要求。

要回答第一个问题:你可以阅读Entities, Value Objects, Aggregates and Roots因为有什么是VO,实体或聚集的一些规则。困难来自于如何应用它们,而经验是解决了这一点。

作为一个总结:

Entities

许多对象都没有从根本上由它们的属性定义,而是通过连续性和身份的线索。

Value Objects

许多对象都没有概念性的身份。这些对象描述的事情特性。

Aggregates

骨料绘制边界附近的一个或多个实体。一个聚集强制为所有的实体,它支持任何操作不变。

© www.soinside.com 2019 - 2024. All rights reserved.