比方说员工是聚合跟,考勤记录是员工的一个属性,是个list ...
如果你设计成,员工是考勤记录的聚合根,那么下面实现方法被局限这个设计边界中,你如果又使用Hibernate之后,边界就越小,就象前面有很多定语,那么你就会被限制,如果你这时欲望又很多,就痛苦疑惑了。
解决办法:权衡你的欲望合理与否,如果遵从自己的欲望(不想数据库执行太多无用语句),那么就重新考虑前面的定语,首先Hibernate是否可优化,或不用?再次是否聚合根设计有问题?
我认为,聚合根设计有问题,将考勤记录划为员工聚合边界内,说明他们之间关系紧密,那么如果员工的销售记录是否也划在其中呢?
领域建模有三个大小不同边界,领域边界,聚合边界,类边界。哪些应该放在哪个边界中,是有反复考量的。
当你放入一个对象进入边界时,有一个反方向力在对抗它:就是低关联,高聚合。所谓高聚合,不是一般的聚合,而是一种最紧密的组成关系,没有你我就活不了,否则不用划。
因为业务功能发生关系的就尽量不用划入聚合边界,因为业务活动一旦发生,他们就自然产生关系,比如员工一旦在考勤这个活动场景中,就自然和考勤发生关系,并自然拉下考勤记录这泡屎。
而我们传统数据库思路,就只看到考勤记录这个静态存活时间很长的这泡屎,然后把员工和屎划上关系,并且强调“就是你拉的屎”,他根本不关系是否看到“考勤”这个蹲下拉屎的动作,依据倒推原则“有记录就有考勤”,那么考勤动作谁来设计呢?上帝做吗?
有可能以上回答你不是很理解,如果你想在现有设计+Hibernate这些定语限制下,又想操数据库那份心,我也没办法帮你,因为对于我来说,是瞎操心。