首页 > 其他分享 >DDD落地02 聚合 值对象

DDD落地02 聚合 值对象

时间:2023-01-15 17:00:30浏览次数:43  
标签:02 聚合 映射 对象 领域 用例 DDD 技能

13 更深刻地理解领域知识

  捕获行为需求和事件风暴

  

DDD落地02  聚合  值对象_应用服务

​    箭头上的文字表示关系的含义。箭头的方向代表的是读这些文字的方向。比如说,“用例分析”指向“捕获行为需求”,读“……是……的一种方法”的时候,就把“用例分析”代入第一个省略号,把“捕获行为需求”代入第二个省略号,对应的读法是“用例分析是捕获行为需求的一种方法”。

DDD落地02  聚合  值对象_省略号_02

首先,读数据和命令,一般会映射到应用服务的 API。读数据映射为查询功能,命令映射为增、删、改等功能。然后,应用服务会查询或操作领域对象,领域对象的修改则会触发领域事件。最后,领域对象的识别,可以从领域名词开始。执行者,一般会映射成领域对象充当的角色。

DDD落地02  聚合  值对象_应用服务_03

DDD落地02  聚合  值对象_应用服务_04

14 聚合的概念

DDD落地02  聚合  值对象_应用服务_05

DDD落地02  聚合  值对象_省略号_06

聚合的表示法

DDD落地02  聚合  值对象_应用服务_07

在一个聚合里,像员工这样代表整体的实体就是聚合根。一个聚合只有一个聚合根。

​最后,我们用一个包把这个聚合中的类包起来,从而可以一眼看出这个聚合的边界。一般我们约定,聚合包的名字和聚合根的名字是一样的

对于聚合而言,聚合根要有全局的唯一标识,而从属于聚合根的实体只需要有局部于聚合的标识。例如,员工是聚合根,员工号是全局标识。而工作经验没有必要进行全局编号,只需要在聚合内部编个号就可以了。例如,001 号员工的第 1 份工作经验、第 2 份工作经验等等。

DDD落地02  聚合  值对象_应用服务_08

15 聚合的实现(上):对聚合封装

DDD落地02  聚合  值对象_省略号_09

DDD落地02  聚合  值对象_应用服务_10

因为聚合的不变规则往往不是单个对象能够处理的。比如说,“同一技能不能录入两次”这个规则,通过查看单独的技能对象是无法验证的,必须查看员工的全部技能,才能判断一条新技能是否重复。所以这种规则必须由聚合根或者相应的领域服务负责验证。

因此,为了保证不绕过规则的校验,非聚合根对象就不能由外界直接创建或修改。这就得出了聚合编程的一个重要原则:聚合外部对象对非聚合根对象只能读,不能写,必须通过聚合根才能对非根对象进行访问。

由于每个聚合都在同一个包里,把技能的 setter 设置成包级权限,就保证了只有在聚合内部的聚合根、领域服务、工厂等才能对他进行修改,外界只能读取。同样,技能对象的构造器也是包级权限,这样,就只有聚合内部才能创建技能对象了

16 聚合的实现(中):实现不变规则

标签:02,聚合,映射,对象,领域,用例,DDD,技能
From: https://blog.51cto.com/u_6478076/6008816

相关文章

  • Canvas 图形-02:绘制基本图形、调色板
    绘制基本图形、调色板<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metahttp-equiv="X-UA-Compatible"content="IE=edge"/><me......
  • 尚硅谷Linux通关2022
    Linux-v10.0-01天-课堂笔记学习目标能够知道什么是Linux系统以及它的应用场景能够独立完成安装VMware虚拟机和网络配置能够独立完成安装CentOS以及远程终端SecureCRT......
  • 没用,随便写的(Dec_8_2022)
    importnumpyasnpfromPILimportImageimportpandasaspdimportmatplotlib.pyplotasplt#第一个#data=2*np.random.rand(10000,2)-1##原本data∈[......
  • 【2023-01-12】连岳摘抄
    23:59那玫瑰花瓣上的露珠,那一只小鸟的欢乐,那一片亮云的消散,那闪光的白雪、彩虹,那翩翩飞去的蝴蝶,那一阵清脆的笑声,所有和我们一触即逝的东西,才能够让我们体会欢乐和痛苦。......
  • 【2023-01-11】连岳摘抄
    23:59无论在哪里,只要生命没有消失,它又会蹒跚地站起来。                                   ......
  • x210-2023-01-14
    1、尝试过在.c文件中补充void__aeabi_unwind_cpp_pro(void){}空函数,但是无效,后采用编译.o过程加入-nostdlib可以成功。 2、前一次编译出错,已经生成错误的.o文件没有mak......
  • 算法--2023.1.15
    1.力扣198--打家劫舍classSolution{publicintrob(int[]nums){intn=nums.length;int[]dp=newint[n+1];dp[0]=0;......
  • 2023.1.15;周日复盘
    复盘目的:复习,简洁,高效想法做事情要考虑目的与后果这样提醒自己更专注当下的原本的事情,不被其他事情被打扰,不忘初心;做好做这件事情可能出现的所有结果的心理准备。To......
  • 《一个程序猿的生命周期》-《发展篇》- 43.从技术向市场转型的感悟。注:对2022年的总结
       完全放弃对技术团队的管理,孤身一人闯市场,确实需要一定的勇气。但是光有勇气就像无头的苍蝇,还得有技术、产品、方案和市场生态,当然最终也有运气的成分。技术、产品......
  • 普冉PY32系列(三) PY32F002A资源实测 - 这个型号不简单
    目录普冉PY32系列(一)PY32F0系列32位CortexM0+MCU简介普冉PY32系列(二)UbuntuGCCToolchain和VSCode开发环境普冉PY32系列(三)PY32F002A资源实测-这个型号不......