DDD领域驱动设计之值对象

值对象

什么是值对象

当一个对象用于对事务进行描述而没有唯一标识时,它被称作值对象(Value Object)。

值对象通常是用来度量和描述事物。我们可以非常容易的对其进行创建,测试,使用,优化和维护,所以在建模时,我们尽量采用值对象来建模。

@Data
public class ColorInfo{
    private String name;
    private String css;
    private String width;
}
{
	"name":"yellow",
	"css":"#FFFF00",
	"width":"100px"
}

有哪些属性可以归为值对象

常见的值对象有数字、文本字符串、日期时间、人的全名、货币、颜色、地址等等。

值对象的特征

当你考虑一个对象是否能够作为值对象时,你需要考量它是否有一下特征:

  • 它度量或者描述了领域中的一件东西
  • 它可以作为不变量
    • 例如String类,它的所有改变自身属性的方法都是返回一个新的String对象实现。
  • 它将不同的相关的属性组合成了一个概念整体
  • 当度量和描述改变时,可以用另外一个值对象予以替换
  • 它可以与其他值对象进行相等性比较
  • 它不会对协作对象造成副作用
    • 因为值对象是不可变的,所以不存在对对象产生修改的副作用(简单的说不会有set方法的输入)

如果想修改值对象时改如何处理?

public class ColorInfoManager {

    @Getter
    private ColorInfo yellow;

    @Getter
    private ColorInfo dark;

    private void setYellow(ColorInfo yellow) {
        this.yellow = yellow;
    }

    private void setDark(ColorInfo dark) {
        this.dark = dark;
    }

    public ColorInfoManager() {

    }


    public ColorInfoManager(ColorInfo yellow, ColorInfo dark) {
        this.setYellow(yellow);
        this.setDark(dark);
    }

    public ColorInfoManager(ColorInfo yellow) {
        this.setYellow(yellow);
    }

    public ColorInfoManager addYellowColorInfo(ColorInfo colorInfo) {
        return new ColorInfoManager(colorInfo);
    }

    public ColorInfoManager addDarkColorInfo(ColorInfo colorInfo) {
        return new ColorInfoManager(yellow, colorInfo);
    }

}

如上诉代码,当需要修改值对象的某个属性的时候在方法中重新构造一个新的对象返回,这样可以保证值对象的不变性。

值对象和实体对比

类型是否需要唯一标记是否可变是否能持有实体引用(不同聚合根)是否可替换
实体
值对象
  • 业务建模的时候什么东西建成实体,什么东西建成值对象?

如何一个模型是需要有生命周期(有持久化和后续重建修改) 的需求那么应该建模成实体,否则应该建模成值对象

比如:一个商品的下单时间、下单人,你是无法修改的,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
ddd领域驱动设计)是一种软件架构设计方法,它将业务领域的核心概念和逻辑放在设计的中心,强调通过深入理解和建模领域来推动软件开发。ddd不仅仅是一种技术,更是一种思维方式。 领域驱动设计视频教程能够很好地帮助学习者理解和掌握ddd的概念和实践技巧。这样的教程通常会结合实际案例和示例代码,通过讲解和演示来阐述ddd的各个方面,包括领域模型、聚合根、实体、值对象、领域服务、应用服务等内容。 通过视频教程,学习者可以更直观地了解ddd的实际运用,减少理解上的障碍。视频教程通常包含了各种图示、动画和演示,更容易帮助学习者理解和记忆相关概念和原则。 针对ddd的视频教程可以在更短的时间内提供更多的信息,可以循序渐进地引导学习者从基础知识到高级实践。学习者可以跟随视频进行练习,通过实际操作加深对ddd的理解和运用能力。 另外,ddd的视频教程也可以提供学习者互动交流的机会。学习者可以通过评论区或者在线讨论组与讲师和其他学习者交流讨论,获取更多的帮助和指导。 综上所述,ddd领域驱动设计视频教程能够以直观、互动和循序渐进的方式帮助学习者理解和运用ddd的思维方式和实践技巧。对于那些对ddd感兴趣或者希望提升自己软件设计能力的人来说,这样的视频教程是非常有价值的学习资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小杨同学~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值