• 南山
    2023-01-18 来自江苏
    个人理解嵌入的前提是实体与实体之间一对一关联的时候,要不要嵌入还要再做考虑,比如是否归属同一聚合内,是否经常一起变更等。

    作者回复: 没错

    共 3 条评论
    9
  • py
    2023-02-22 来自上海
    享元模式是Flyweight,不是lightweight

    作者回复: 十分感谢指出这个笔误,我尽快改。

    共 4 条评论
    2
  • 请叫我和尚
    2023-02-15 来自北京
    这里有个问题请教一下: 1. 国内还是用 mybatis及mybatis plus 多一些,会根据数据库自动生成单表的 xxMapper 和 xxEntity,所以一般都在仓库的实现层做 xxEntity 和领域对象的转换是吧?不管是 save 、update、select 还是 delete

    作者回复: 是

    
    1
  • H·H
    2023-02-01 来自上海
    值对象也可以以json形式内嵌 我理解实体不能内嵌,如果内嵌就成了另一个实体的值对象了

    作者回复: JSON也是一种可行的方式 内嵌实体的情况比较少,但理论上不能排除这种可能性。

    
    1
  • tt
    2023-01-17 来自北京
    实体不可以采用内嵌的方式吧,因为实体有自己的标识,那么被内嵌到的实体数据如何保存唯一的标识呢?

    作者回复: 假如是一对一的话,是可以考虑嵌入的(但不是一定要嵌入)。这时可以理解为共用同一个标识。

    
    1
  • Geek_79f5fb
    2023-05-30 来自浙江
    个人理解,数据库存储共享“地址”,这时候已经把“地址”作为实体看待了,而又在内存层面看成是值对象,中间做的转换感觉是一个伪工作。所以我理解值对象只有非共享模式。

    作者回复: 为什么数据库共享“地址”,就是看作实体了呢?

    
    
  • Sam.张朝
    2023-04-19 来自上海
    用mongoDB json 存储的话,属于自身的,都可以内嵌,如果没有外部关联查询

    作者回复: mongodb 是一种情况。就算用关系数据库,如果是一对一的关系,也可以内嵌

    
    
  • Michael
    2023-03-07 来自陕西
    不共享对象特别是地址这种数据,也是我们正在用的方式,这种方式还有一个不好的地方,就是duplicate太多数据在数据库,导致查询性能降低。所以又渐渐开始共享数据,确实会增加编程复杂性,那么请问老师对于不共享数据造成的查询性能下降有什么解决办法么?

    作者回复: 这要看一下具体的查询场景才能回答。比如利用索引,搜索引擎,还有后面讲的CQRS的一些思路。

    
    
  • escray
    2023-01-31 来自北京
    对象图,以前也知道 UML 里面有对象图,但是却不知道怎么用,也没有注意到对象图和类图的差异。 对象的内存布局 实体的内存布局 值对象的内存布局 实体的数据库布局 值对象的数据库布局 享元 lightweight,共享的单元 阻抗不匹配:数据库里是同一个表,在内存中是不同对象;在仓库 Repository 中消除阻抗不匹配 → ORM 框架 值对象在内存和数据库中都可以采用共享或者不共享的方式,但是一般情况,不共享的方式比较常见。除非是为了优化存储性能或其他原因,可以考虑共享方式。(现在存储比较便宜,包括内存,所以更多采用不共享方式?) 实体一般是共享的,需要复杂逻辑保证;如果不共享,就更容易出错。 思考题: 1. 实体也可以采用内嵌的方式,感觉主要是为了节省计算资源,而采取的冗余存储。比如在历史变更表里面有人员的信息,可以使用人员表中的实体,也可以直接把实体信息复制到历史变更表中。 2. 地址的不共享方式维护,相对比较简单;如果采用共享方式,那么每次更新或者删除的时候,都需要遍历,看看是否有共享的情况,并且做出相应的处理。 其实,在大部分情况下,可以考虑实体共享,值对象不共享。
    展开

    作者回复: 笔记记得很好,所谓“好记性不如烂笔头”。 享元英文应该是Flyweight,我之前写错了。 历史表里的人员信息,可以理解为是人员信息的快照,算作值对象比较好。

    
    
  • aoe
    2023-01-18 来自浙江
    用 UML 画的内存布局通俗易懂,原来 UML 还可以这么玩! 因为值对象是不可变的,所以继承了值不可变对象的优缺点 关于不可变对象的优缺点,来自 perplexity.ai 的回答 优点: 当对象被不可信的库调用时,不可变形式是安全的; 不可变对象被多个线程调用时,不存在竞态条件问题; 不可变对象复制对象时,通过复制引用而不是整个对象来复制它,从而减少内存使用和提高执行速度 缺点: 需要为每个不同的值创建单独的对象; 当需要更改对象状态时,使用起来会比可变对象困难得多; 使用者体验差,因为实例化时需要初始化所有值
    
    4