第二部分:DDD中的值对象

news/2025/2/8 18:41:32 标签: 设计规范, 程序人生

目录

定义

最佳实践

不好案列

值对象的使用方式


定义

  1.  用于度量或者描述领域中的某一概念,本身没有概念标识的对象;
  2.   创建之后,它是不可变的,当度量或者描述改变时,可以用另一个值对象予以替换;
  3. 可以把一组相关的属性整合到一起,表达一个整体概念(比如RMB(元),就是一个数字加上货币类型组成一个RMB这样的整体概念);
  4. 值对象的构造函数保证概念整体的有效性和不变形;
  5. 值对象的所有方法都是无副作用的函数(不修改内部属性)。

最佳实践

  1.  优先使用值对象而非实体对象建模,判断一个对象是值对象还是实体?调用者对其的相等判断是依据值(值对象)还是依据身份标识(实体);对象的属性值是否发生变化,如果发生变化,产生一个完全不同的对象(值对象),还是维持相同的身份标识(实体);值对象无需管理生命周期管理,往往作为实体的附庸,不拥有Repository;
  2. 善于运用值对象而非内建类型去表达那些细粒度的领域概念。可以封装领域逻辑,包括自我验证(减少实体类拥有的大量验证代码)等自给自足的领域行为,分摊实体上的行为重任;
  3. 尽量将值对象设计为不变类。对象创建以后其状态就不能修改。可以减少并发控制的成本;
  4. 当模型概念从上游上下文流入下游上下文中,可以使用值对象来表示这些概念,通常会去简化属性,形成一种“实体的描述”,从而蜕变为值对象。

不好案列

  1. 值对象中引用实体对象。值对象的方法中传入实体;
  2. 将所有东西看成值对象,如对实体中的简单属性,其并不和其他属性关联,不需要额外功能支持;
  3. 一个值对象有可能被当成数据库实体而被持久化,但并不意味着我们将领域对象建模成实体。要回到本质问题的思考:“度量或描述”而非实体存在。

    值对象经常作为参数在对象之间传递消息。它们常常是临时对象,在一次操作中被创建,然后丢弃。它可用作实体(以及其他值对象)的属性。

值对象的使用方式

     复制和共享,具体使用哪种方式取决于实现环境。虽然复制有可能导致系统被大量的对象阻塞,但是共享可能会减慢分布式系统的速度。
           在以下情况最好使用共享:这样可以发挥共享的最大价值并最大限度的减少麻烦。
           1.节省数据库空间或者减少对象数量是一个关键要求时。
           2.通信开销很低时
           3.共享对象被严格要求限定为不可变时


http://www.niftyadmin.cn/n/5161713.html

相关文章

Valve 近日又为所有支持平台发布了新的 Steam 客户端更新

导读继发布 SteamVR 2.0 之后,Valve 近日又为所有支持平台发布了新的 Steam 客户端更新,其中引入了多项新功能、改进和错误修复,为玩家提供最佳的 Linux 游戏体验。 对于 Linux 玩家来说,新的 Steam Client 更新包括 64 位 openvr…

参与 Ai 诈骗高发活动

今年以来, AIGC在聊天、写作、绘画、编程等领域展现了巨大的潜力,却也由此催生出利用“AI换脸”、“AI换声”来实施诈骗的安全隐患。你认为AI诈骗应该如何防范,来说说你的看法吧! 看到这个论题,菜鸟只能说&#xff0c…

【算法与数据结构】17、LeetCode电话号码的字母组合

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:本题需要解决的问题有三个: 一、如何实现数字到字母的映射二、如何实现组合问题三、如何解…

EasyExcel 导出冻结指定行

导出的实体类 package org.jeecg.modules.eis.test;import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.*; import lombok.Getter; import lombok.Setter; import org.apache.poi.ss.usermodel.HorizontalAlignment;import…

第四章:java关键字super

系列文章目录 文章目录 系列文章目录前言一、super关键字二、super 和 this 的比较总结 前言 super关键字可以用于对象访问父类成员。 一、super关键字 super 代表父类的引用, 用于访问父类的属性、 方法、 构造器。 super.属性名 //访问父类的属性,不…

Vue2打包自定义文件命名规则CDN部署前端项目

当前公司的服务器带宽较低 将项目全部打包后部署至服务器加载时间比较长 于是就打算将静态资源文件上传至七牛云 每次只把打包后dist目录下的index.html更新至服务器 然后必须要把vue.config.js的 publicPath 替换为对应的七牛云cdn地址 但是有缓存的问题 导致重新打包上…

GreenPlum简介

简介 Greenplum是一家总部位于**美国加利福尼亚州,为全球大型企业用户提供新型企业级数据仓库(EDW)、企业级数据云(EDC)和商务智能(BI)提供解决方案和咨询服务的公司,在全球已有:纳斯达克,纽约证券交易所,Skype. FOX&…

react fiber架构【详细讲解,看这一篇就够了】

文章目录 前言什么是fiber架构React Fiber的运行流程Fiber关键特性在没有fiber架构之前的react是什么样子的?Fiber解决问题的核心?后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:react.js 🐱‍&#…