zoukankan      html  css  js  c++  java
  • DDD之3实体和值对象

    image.png

    图中是一个别墅的模型,代表实体,可以真实的看得到。那么在DDD设计方法论中,实体和值对象是什么呢?

    背景

    实体和值对象是领域模型中的领域对象,是组成领域模型的基础单元,一起实现实体最基本的核心领域逻辑。

    那么问题来了:

    1, 他两在领域模型中的作用是什么?

    2,在系统中跟代码模型和数据模型是怎么对应的?

    搞清楚这两个问题很重要。回答问题是需要有知识基础的,先来捋清楚这两个概念的定义和内涵。然后在小结部分我们来回答这两个问题。

    实体

    定义: DDD中的一类对象,拥有唯一标识符,经历各种状态变更后仍然可以保持一致,对这类对象而言,重要的是延续性和标识,(对象的延续性和标识可以超出软件的生命周期)而非属性。

    形态:不同的设计过程中,形态不一致。

    file

    值对象

    定义:通过对象的属性值来识别的对象是值对象,它将多个相关属性组合为一个概念整体。它是没有标识符的对象;
    **

    特点:值对象描述了领域中的一件东西,这个东西是不可变的,它将不同的相关属性组合成了一个概念整体,当度量和描述改变的时候,它可以用另外一个值对象替换,并进行相等性比较而不会带来副作用;
    **
    **
    简单来说: 值对象本质就是一个集合;
    **
    意义:领域建模过程中,值对象可以保证属性归类的清晰和概念的完整性;
    **
    image.png
    **
    **

    上图中: 如果把省市区地址放在人员实体中,会显得属性很多很零碎。 推荐的做法是把省市区地址构成一个集合,即地址值对象;

    file

    file

    例子:人员地址案例;

    file

    缺点:如果实体引用的值对象过多,会导致实体堆积一批缺乏概念完整性的属性,值对象失去了业务含义,操作起来不方便;

    实体PK值对象

    file

    DDD提倡从领域模型设计出发,而不是先设计数据模型;

    小结

    首先明确了实体和值对象的概念,以及在不同的设计阶段的形态。然后通过一个例子展示了实体和值对象的概念和使用;

    这是一个从业务模型向系统模型落地过程,考验的是设计能力,我们应该结合自己的业务场景,选择合适的方法进行微服务设计。

    最后我来回答一下在背景部分抛出的两个问题?

    1, 实体和值对象在领域模型中的作用是什么?

    2,在系统中跟代码模型和数据模型是怎么对应的?

    经过上面的分析,我的回答如下:

    file

    希望大家都理解好DDD的实体和值对象,设计出高度灵活的代码;

    原创不易,关注诚可贵,转发价更高!转载请注明出处,让我们互通有无,共同进步,欢迎沟通交流。
    我会持续分享Java软件编程知识和程序员发展职业之路,欢迎关注,我整理了这些年编程学习的各种资源,关注公众号‘李福春持续输出’,发送'学习资料'分享给你!

  • 相关阅读:
    【leetcode】106. Construct Binary Tree from Inorder and Postorder Traversal
    【leetcode】105. Construct Binary Tree from Preorder and Inorder Traversal
    【leetcode】236. Lowest Common Ancestor of a Binary Tree
    【leetcode】235. Lowest Common Ancestor of a Binary Search Tree
    【leetcode】352. Data Stream as Disjoint Intervals
    【leetcode】897. Increasing Order Search Tree
    【leetcode】900. RLE Iterator
    BEC listen and translation exercise 26
    BEC listen and translation exercise 25
    BEC listen and translation exercise 24
  • 原文地址:https://www.cnblogs.com/snidget/p/13042411.html
Copyright © 2011-2022 走看看