This commit is contained in:
by931
2022-09-06 22:30:37 +08:00
parent 66970f3e38
commit 3d6528675a
796 changed files with 3382 additions and 3382 deletions

View File

@@ -613,7 +613,7 @@ public final class Money {
</code></pre>
<p>倘若审视方法与属性之间的关系,也可瞧出个中端倪。若一个方法仅仅操作了该实体的部分属性,则说明该方法与整个实体的关系要弱于与这部分属性之间的关系,如 checkReservationDuration() 方法与 Reservation 实体之间的关系,就要弱于它与 checkInDate 和 checkOutDate 之间的关系。这就需要依据关系强弱的差异对类的成员进行剥离。在《修改代码的艺术》一书中Michael C. Feathers 将这种方式总结为职责识别的探索式方法——寻找内部关系。他还提出了通过绘制特征草图Feature Sketch的方法来描绘类内部的关系从而判断类的职责分配是否合理。</p>
<p>在设计实体时,我们亦可采用特征草图来帮助我们寻找在领域分析建模阶段未曾识别出来的细粒度的领域概念,然后将其定义为值对象。参考《修改代码的艺术》书中的案例,假设 Reservation 类除了定义了 checkReservationDuration() 方法之外,还包括 extendForWeek() 与 getAdditionalFee() 方法,这些方法与类属性的特征草图如下所示:</p>
<p><img src="assets/21151920-c751-11e9-99c1-c37abd23c4b1" alt="50551551.png" /></p>
<p><img src="assets/21151920-c751-11e9-99c1-c37abd23c4b1" alt="png" /></p>
<p>特征草图非常清晰地表达了方法与属性之间关系的归类,沿着上图所示的边界对实体类进行拆分,然后通过这种高内聚关系抽象出领域概念,由此定义对应的类。如此,职责的分配就能变得更加合理,从而提高领域设计模型的质量。</p>
<p>值对象定义的方法往往是所谓的“自给自足的领域行为”,这些领域行为能够让值对象的表现能力变得更加丰富,更加智能。这些自给自足的领域行为通常包括但不限于如下职责:</p>
<ul>