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软件编程知识和程序员发展职业之路,欢迎关注,我整理了这些年编程学习的各种资源,关注公众号‘李福春持续输出’,发送'学习资料'分享给你!

  • 相关阅读:
    分页参数处理逻辑的最佳实践
    浅谈软件界面设计原则
    Django 页面缓存的cache_key是如何生成的
    mvn 命令上传 jar 包到 nexus 私仓
    知 识 收 录
    JavaScript 使用Map对象
    windows bat脚本守护java进程
    ubuntu java启动shell脚本
    Linux cron定时任务启动jar程序
    ubuntu java调用海康sdk报错Unable to load library '/home/bjlthy/HCNetSDK/libPlayCtrl.so'
  • 原文地址:https://www.cnblogs.com/snidget/p/13042411.html
Copyright © 2011-2022 走看看