我们在DDD领域建模过程中,往往会很容易忽略对关系的建模,或者可以理清两个名词之间的关系是1对1、1对多、多对多,但是不知道如何在模型中设计这些关系。尤其是在多对多的场景中,仅仅靠体现名词对象之间的关联关系来表达这种关系就会显得缺乏表现力,这个时候就可以将“关系”提炼为模型中一个显式的概念。
例如,
- 在招聘系统中,一个应聘者使用某一分简历对某个职位进行了投递,此时简历和职位就发生了关系,我们可以把这个关系显式的抽象为:应聘
- 在权限系统中,一个角色可以被授予一个用户,这次授予我们可以抽象为:授权
- 在促销系统中,促销活动和促销规则的组合,可以显式抽象为:促销产品
我在以前的文章中也写过,我们不要忽略动词,要对动词有敏锐的嗅觉。领域中的动词,往往他对应的名词就是一个重要的模型概念,即聚合根。例如上面的2个例子,一次应聘的发生,产生一个应聘聚合根;一次授权的发生,产生授权聚合根;而促销产品,则是促销活动和促销规格的组合二产生,也是一种多对多关系的关系建模。