魏国的丁厨师给魏惠王介绍他如何解牛:解牛时,需得顺着牛体天然的结构,击入大的缝隙,顺着骨节间的空处进刀。由于牛体的骨节有空隙,而屠刀的刀口却薄得像没有厚度,于是我以无厚入有间,没有厚度似的刀口在有空隙的骨节中,真可以说是游刃有余。每当遇到筋骨交错聚结的地方,我看到它难以处理,就会怵然为戒,目光更专注,动作更缓慢,用刀更轻柔,结果它霍地一声剖开了,像泥土一样散落在地上。
丁厨师的解牛技巧可以总结为:
- 杀牛前,需要理清牛体的结构
- 刀薄且快
- 找到骨节的空隙至为关键
- 若遇筋骨交错聚结之处,需谨慎用刀
经过领域分析模型转换而来的对象图就是一头牛,聚合是刀,且是一把没有厚度的刀。设计者该当像丁厨师那般解对象图:
- 需弄清楚对象图的结构
- 聚合为边界,乃无厚度之刀
- 寻找关系最薄弱处下刀,以无厚入有间
- 若依赖纠缠不清,当谨慎使用聚合
这实际上就是高质量设计聚合的基本过程:
- 第一步:弄清楚对象图的结构。可以以细化后的领域分析模型作为领域设计模型对象图,理清它们之间的关系,辨别类为实体还是值对象,并保证类关系的单一导航方向。
- 第二步:以关系强弱为界,以聚合边界为刀,逐一分解。仅仅将具有继承关系与合成关系的类放入聚合边界内,其余类则一刀解开,各自为独立的聚合。
- 第三步:怵然为戒,谨慎设计聚合。针对聚合边界模糊的地方,运用聚合设计原则做进一步推导。
这个过程可戏称此为聚合设计的<