戏说领域驱动设计(二十):值对象是如何定义的?

2026-05-19 18:280阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计6395个文字,预计阅读时间需要26分钟。

戏说领域驱动设计(二十):值对象是如何定义的?

在DDD(领域驱动设计)中,价值对象与比较抽象的领域模型相比,许多人学习了一半也难以明确其定义。即便是明白此道理的人,也付出了不少努力,但仍有很多人觉得不轻松。现在,借助一些模式和方法,理解价值对象变得更为模型化和具体化。例如,战术模式中的领域服务、对象设计等,都是帮助深入理解领域模型的途径。

  值对象这个东西在DDD里算是比较抽象的,好多人学了半天也学不明白。我这种聪明人也费了好大劲,总算苦心人天不负,现在也能用个有模有样了。战术模式中不论是领域服务、对象工厂还是资源库,基本上您能听懂是什么意思,在BO层中所承担的角色也比较明确,唯独这个值对象有点坑爹。遥想当年我在使用C#的时候,里面有一个值类型,与别人讨论的时候经常会把这个东西搞混,就我现在写东西还下意识把“值对象”写成“值类型”呢。《实现领域驱动设计》书中针对值对象给了大概8类特性概括,如下图所示。不过要我说,也就那么有限几点值得注意的。如果从编程的角度来看,所谓的值对象其实也很普通,所以让我们以白话的形式盘盘它。

一、特性

  以我来看,最难的地方就是值对象与实体类型在建模时候的决择。有些对象可以是实体,也可以是值对象,反正你怎么想都有理。很多初学者包括我自己也时常搞迷惑,之所以出现这种问题以我现在的经历来看有三个原因:一是在建模的时候偏离了领域驱动的约束而以数据库为参照,毕竟我们在上学的时候学习编程都是从数据库驱动开始的。数据库要求每一个表都应该有个主键,而有的时候值对象需要单独存在一个表中,这种情况就容易造成把值对象看成实体。其实开始设计的时候是想着围绕着领域来搞的,不过做着做着就跑偏了,这是由于潜意识造成的偏差。

阅读全文

本文共计6395个文字,预计阅读时间需要26分钟。

戏说领域驱动设计(二十):值对象是如何定义的?

在DDD(领域驱动设计)中,价值对象与比较抽象的领域模型相比,许多人学习了一半也难以明确其定义。即便是明白此道理的人,也付出了不少努力,但仍有很多人觉得不轻松。现在,借助一些模式和方法,理解价值对象变得更为模型化和具体化。例如,战术模式中的领域服务、对象设计等,都是帮助深入理解领域模型的途径。

  值对象这个东西在DDD里算是比较抽象的,好多人学了半天也学不明白。我这种聪明人也费了好大劲,总算苦心人天不负,现在也能用个有模有样了。战术模式中不论是领域服务、对象工厂还是资源库,基本上您能听懂是什么意思,在BO层中所承担的角色也比较明确,唯独这个值对象有点坑爹。遥想当年我在使用C#的时候,里面有一个值类型,与别人讨论的时候经常会把这个东西搞混,就我现在写东西还下意识把“值对象”写成“值类型”呢。《实现领域驱动设计》书中针对值对象给了大概8类特性概括,如下图所示。不过要我说,也就那么有限几点值得注意的。如果从编程的角度来看,所谓的值对象其实也很普通,所以让我们以白话的形式盘盘它。

一、特性

  以我来看,最难的地方就是值对象与实体类型在建模时候的决择。有些对象可以是实体,也可以是值对象,反正你怎么想都有理。很多初学者包括我自己也时常搞迷惑,之所以出现这种问题以我现在的经历来看有三个原因:一是在建模的时候偏离了领域驱动的约束而以数据库为参照,毕竟我们在上学的时候学习编程都是从数据库驱动开始的。数据库要求每一个表都应该有个主键,而有的时候值对象需要单独存在一个表中,这种情况就容易造成把值对象看成实体。其实开始设计的时候是想着围绕着领域来搞的,不过做着做着就跑偏了,这是由于潜意识造成的偏差。

阅读全文