• 第二部分:DDD中的值对象


    目录

    定义

    最佳实践

    不好案列

    值对象的使用方式


    定义

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

    最佳实践

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

    不好案列

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

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

    值对象的使用方式

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

  • 相关阅读:
    基于Android的学习生活交流APP计算机毕业设计源码
    【Mysql】 InnoDB引擎 - 介绍
    1. js中let、var、const定义变量区别与方式
    2.1 多进程:进程间通信
    java项目-第142期ssm美食推荐系统-ssm毕业设计_计算机毕业设计
    【毕业设计】基于 STM32 的自动泊车系统 -智能小车 - 物联网单片机
    Window + Ubuntu 双系统无Ubuntu Bios 启动项
    神经网络pid控制器设计,pid神经网络什么原理
    正则表达式
    【刷题专栏—突破思维】142. 环形链表 II
  • 原文地址:https://blog.csdn.net/u014745465/article/details/134286353