mirror of
https://github.com/zhwei820/learn.lianglianglee.com.git
synced 2025-11-17 06:33:49 +08:00
fix img
This commit is contained in:
@@ -551,7 +551,7 @@ function hide_canvas() {
|
||||
</ul>
|
||||
<p>考虑在线试题领域中问题与答案的关系。Question 若缺少 Answer 就无法保证领域概念的完整性,调用者也不会绕开 Question 单独查看 Answer,因为 Answer 离开 Question 是没有任何意义的。因此,Question 与 Answer 属于同一个聚合,且以 Question 实体为聚合根。</p>
|
||||
<p>同样是问题与答案之间的关系,如果为知乎问答平台设计领域模型,情况就发生了变化。虽然从领域概念的完整性看,Question 与 Answer 依然属于强相关的关系,Answer 依附于 Question,没有 Question 的 Answer 也没有任何意义,但由于业务场景允许阅读 Answer 的读者可以单独针对它进行赞赏、赞同、评论、分享、收藏等操作,如下图所示:</p>
|
||||
<p><img src="assets/becd14e0-ccbc-11e9-9f23-07a3e2a236db" alt="62821636.png" /></p>
|
||||
<p><img src="assets/becd14e0-ccbc-11e9-9f23-07a3e2a236db" alt="png" /></p>
|
||||
<p>这些操作就等同于为 Answer 赋予了“完全民事行为能力”,具备了独立性,就可以脱离 Question 聚合成为单独的 Answer 聚合。</p>
|
||||
<p>与实体相反,领域设计模型中值对象不存在这种独立性。根据聚合的定义,最小的聚合必须至少要有一个实体,这就意味着值对象不能单独成为一个聚合。值对象必须寻找一个聚合,作为它要依存的主体。个别值对象如 Money 等与单位、度量有关的类甚至会在多个聚合中重复出现。</p>
|
||||
<h4>不变量</h4>
|
||||
@@ -561,7 +561,7 @@ function hide_canvas() {
|
||||
</code></pre>
|
||||
<p>该不变量决定了 LineItem 与 PurchaseOrder 必须放在一个聚合中,因为只有将它们控制在聚合边界内,才能够有效满足该不变量。</p>
|
||||
<p>要完全理解何为“不变量”,虽有这三大特征作为辨别的依据,仍非易事。为了让不变量帮助我们确定聚合的边界,可以放宽定义,将其视为“施加在聚合边界内部各个对象之上的业务约束”。例如,业务约束规定一篇博文(Post)必须至少有一个博文类别(Post Category),就可以当做是一个不变量。要满足这个不变量,就需要将 Post 与 PostCategory 放到同一个聚合中:</p>
|
||||
<p><img src="assets/ee896350-ccbc-11e9-8d89-4fa271cb1633" alt="77139148.png" /></p>
|
||||
<p><img src="assets/ee896350-ccbc-11e9-8d89-4fa271cb1633" alt="png" /></p>
|
||||
<p>在设计聚合时,可以结合领域逻辑去寻找具有不变量特征的业务约束。通常,此类约束表现为用例的前置条件与后置条件,或者用户故事的验收标准。即使不是为了设计聚合,业务分析人员也应当给出业务约束的描述。例如,在航班计划业务场景中,编写“修改航班计划起飞时间与计划到达时间”这一用户故事时,就需要给出验收标准,如:</p>
|
||||
<ul>
|
||||
<li>若该航班有共享航班,在修改航班计划起飞时间与计划到达时间时,关联的所有共享航班的计划起飞时间与计划到达时间也要随之修改,以保持与主航班的一致。</li>
|
||||
|
||||
Reference in New Issue
Block a user