• 6点无痛早起学习的和...
    2023-02-15 来自北京
    在工作有这样一个业务场景,拿捏不定是否可以使用这节课的限定: 1. 业务需求,1 个用户可以有多个户类型(一类户、二类户、三类户)的户,约束:但是同户类型只能有一个是正常的户(户可以注销变为不正常)。 解读:1 个用户只能有一个正常的一类户(户类型还有二类户、三类户等等),一类户可以注销(就变为了不正常) 如果我用状态做限定,设置数据库唯一索引(用户 id、户类型、状态),这样就不能存在多个注销状态的一类户,因为会唯一冲突 所以不知道我这个到底能不能做限定了?望老师解答

    作者回复: 正如您分析的那样,这种情况不能用限定。

    
    1
  • tt
    2023-01-26 来自北京
    小结,限定使用的属性: - 在数据库实现中,对应组成(复合)唯一索引的某一个列; - 在代码实现中,对应Map的键 - 那么由上面两条结论可以有如下推论:数据库的唯一索引对应代码中的Map - 这个属性是非聚合根的局部标识 限定将一对多形式上转换成一对一,在代码里实际上就是把“多”放入Map中,让聚合根和代表这个Map属性“一对一”

    作者回复: 总结不错,不过最后半句,我觉得更恰当的说是Map里的键和值一对一。

    共 2 条评论
    1
  • 邓西
    2023-02-13 来自四川
    1. 同一个员工不同工时记录中的时间段不能重叠; 2. 结合之前的课程,将一个n:n的关联关系,通过引入一个表示关联的实体,拆解成两个1:n的关联,然后就可以通过两个Map结构实现限定了。

    作者回复: 您说的也是一种思路。就整体而言,多对多可能被限定为一对多

    
    
  • escray
    2023-01-31 来自北京
    之前确实没有注意到限定 qualification 的建模技术,因为不太熟悉,感觉在 UML 图中增加限定的标记(小方框)并不太明显。 使用唯一索引可以在数据库中表达”限定“。 使用 Map 取代 List 可以在代码中实现”限定“。 写代码的时候打开模型图,然后看到模型图(领域设计)可以与自然语言双向转换。 思考题: 1. 项目中一般会有限定,但是可能并没有重视,能想到的就是文档的编辑历史,在一个时间段只能有一个人编辑并提交。 2. 多对多如果采用限定来表达,中间需要有一个表或者对象来转换,似乎更复杂了。 限定是否仅用于值对象?

    作者回复: 1 编辑历史的例子挺好 2 多对多,不管有没有限定,多数都要一个中间表。在概念层面,多对多被限定以后,有可能在形式上变成一对多。 理论上限定也可以用于实体,不过我确实也没遇到过这样的例子。

    
    
  • aoe
    2023-01-25 来自浙江
    “总体上看,一个员工可以有多条工作经验”,这个不看上文,直接看“时间段限定”的图还真难一眼看出。
    共 2 条评论
    2