原创 | 使用 JPA 实现 DDD 持久化 - O: 对象的世界 (3/3)

本文探讨了领域驱动设计(DDD)中的领域模型,重点在于实体(Entity)和值对象(Value Object)的概念。实体通过唯一标识符进行识别,值对象关注其属性值,两者共同构成业务领域的核心。实体具有独立生命周期,状态可变;值对象不可变,依附于实体。正确建模实体和值对象有助于简化系统设计并符合业务语义。
摘要由CSDN通过智能技术生成

领域模型

对象模型中有一部分与技术完全无关,纯粹用于描述问题域中的业务实体和业务逻辑的类,它们组成了领域模型(domain model)。领域模型主要由**实体(Entity,又称为引用对象)值对象(Value Object)**组成。

1、实体(Entity,又名引用对象Reference Object)

领域模型中,最关键的一组类是实体类。实体类用于建模问题域中的关键概念,例如顾客(Customer)、订单(Order)、账户(Account)等。实体拥有独立的生命周期,通常是有状态的,在实体的生命周期中,其属性值可以发生多次改变。

实体通过标识符(ID)来进行识别,属性值的变化无关紧要。类型和标识符相同的两个实体视为同一个实体,即使其余的属性值完全不同。标识符不同的两个实体视为不同的实体,即使其余的属性值都相同。实体的重点是通过ID表明它**“是谁”,而不是通过属性表明它“是什么样子”**。

为了思考什么是实体,思考下面的问题:

  • 五岁的我和现在的我是同一个人吗?
  • 一个人杀了人之后逃走了,为了逃避罪责,他染了发,整了容,改姓埋名,甚至做了变形手术。后来他被抓到了,他还是不是以前犯罪的那个人,需不需要承担杀人的后果?

上面问题的答案都是肯定的:是同一个人。人是一种实体类型。年龄、发色、相貌、姓名、甚至性别的变化都不影响他是同一个人。可以认为每一个人都有一个隐含的标识符,唯一标识了他的身份,把一个人和另一个人区分开。注意:姓名和身份证号码都不是必然的标识符,因为这些属性都是可以更改的。

实体的关键特征是:

  • 拥有一个唯一且不变的标识符。通过标识符来识别相同的实体对象和区分不同的实体对象。
  • 拥有独立的生命周期。
  • 在实体生命周期中其状态(属性值)可以发生变化。

2、值对象(Value Object)

领域模型中还存在一类对象,它们用于描述领域实体的某个方面,而本身没有概念标识,我们关注的是它**“是什么样”而不关心它“是谁”,我们把这种类型的对象成为值对象**。它们本质上是**“披着对象外衣的值”**。

值对象的例子是电子邮箱Email、金额Money和订单项目OrderLine等。值对象可以包含单个属性,例如Email类包括一个属性address,也可以包括两个或多个属性,例如Money类包括amountcurrency两个属性,OrderLine类包括quantity、priceproduct属性。值对象的属性类型可以是简单值,也可以是其他值对象,甚至是实体。例如值对象OrderLine类的price属性类型是值对象Money,而product属性类型是实体类Product

值对象用于描述它所从属的实体的某个方面的属性。如同我们可以用简单值182来描述某个人(实体)的身高(以厘米表示)一样,我们可以5美元

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值