当前位置: 首页 > 知识库问答 >
问题:

ddd:实体或 VO

苏畅
2023-03-14

假设我有一个乘客对象,该对象应包含护照(政府 ID)对象。我正在从乘客存储库获取乘客PassengerRepository创建对服务器的请求并获取数据(json),而不是解析接收的数据并存储在存储库中。

我很困惑,因为我想将< code>Passport存储为实体,并将其放入< code>PassportRepository中,但所有关于密码的信息都包含在json中,而不是我在上面收到的信息。

我想我应该使用护照作为 VO 并将其放入乘客(聚合)对象中。或者我可以创建一个乘客服务,其中包括乘客存储库和护照存储库

有什么想法吗?

共有2个答案

商正浩
2023-03-14

我想说护照是VO。一个人可以更换她的护照,这意味着新的护照(新的序列)被签发。我认为护照只是政府的一个实体,因为它需要跟踪每个独特的实体。对我们其他人来说,我们不在乎新护照是否和旧护照有相同的身份证。我们关心的是有一本有效的护照。

张献
2023-03-14

对象是由其属性定义的对象 - 具有相同属性值的两个实例本质上是相同的值。如果这对您的护照类型是正确的,那么它应该是 VO。

如果它确实是一个VO,那么你是排序的-它只能通过聚合访问。

然而,如果情况并非如此,并且在您的域中,无论属性如何变化(例如,有人更改了他们的姓名),passport都具有保持不变的身份,那么您需要考虑在您的域中< code>Passport实体是否只有在与< code>Person关联时才有意义。如果它们只在这个上下文中有意义,那么它们也应该只通过聚合来访问。

 类似资料:
  • 我正试图让我的头绕过DDD,但我卡住了。这就是我如何设置我的项目: 然后,我继续实现UserRepository,这里我遇到了另一个问题:UserRepository接口需要域用户模型,当我试图在DAL中实现接口时,我需要使用域用户模型来实现它,这导致DAO是为域模型而不是DAL模型创建的,这没有任何意义。唯一能修正的就是在域层中引用DAL,这是错误的。 有人能解释一下我在DDD中遗漏了什么吗?

  • 域内有一个接口“DetectPriorityInterface”。两个实现必须同时处于活动状态;一种“混合”必须实时地选择一种而不是另一种。 问题是:这些实现(两个实现)应该住在哪里:在域层还是基础结构层?? 内部实现充满了业务规则,应该驻留在域层。外部实现是一个简单的调用,应该存在于基础结构中。 null 客户端使用接口,因此,对于应用层,所有这些东西都是trasparent;接下来,我们将删除

  • 在我的业务逻辑中,可以通过他/她的手机号码来识别。第三方验证系统确保客户的电话号码真实存在,并在将记录插入表格之前检查唯一性。在我看来,已经是唯一的,所以是不必要的。 这是我当前的课程当前是类中的值对象。 我想改变如下。 如果在聚合根或实体中使用非UUID Id,是否存在任何缺陷?

  • GNU DDD (Data Display Debuger) 是一个图形化的调试工具,通过对调试命令例如 GDB、DBX、WDB、JDB、XDB 等等命令行工具的封装,提供一个非常友好的调试界面。

  • 问题内容: 您实体的ID是 长 (原始类型)还是 长 (对象类型)? 该ID是表的主键,在数据库中从不为“ null”。 我的同事建议使用“对象类型长”。 默认情况下,Hibernate反向工程工具会生成一个长为id的基本类型。 选择什么? 长还是长? 问题答案: 我认为使用Long更好,因为通过检查该值来检查实体是否具有持久身份是更正确的(在MySQL中,您可以将ID设置为0)。另外,像Spri

  • 最好的例子是需要持久化实体。我有以下候选项来为用户分配唯一标识符: < li >分配后端(NDB、MySQL等)提供的密钥。). < li >通过某些服务(如系统时钟)手工制作唯一标识符。 < li >像emailId这样的属性。 举一个详细视图的简单例子,我们经常有一个用户的详细显示,比如,如果我们保持emailId作为唯一ID,那么用户有可能在某一天更改其电子邮件ID并破坏它。 哪个是识别同一