领域驱动设计-读书笔记-第八章-突破

本章,重点通过作者举实际例子,说明是如何一步步从小的领域模型改动,突破到大的领域模型改动,并带来的收益和成本。

突破与时间/价值的趋势图:

需求:

假如Intel想要建造一座价值10亿美元的工厂,就需要申请贷款,但贷款的额度太大,以至于任何一家借贷公司(lending company)都无法独立承担,于是这些公司就组成银团[2],集中它们的资源,以此来支持这种巨额信贷。投资银行通常
在银团里担当领导者的角色,负责协调各种交易和其他服务。我们的项目就是要开发这样一个用于跟踪和支持以上整个过程的软件。

初步的模型:

一笔Loan有多个Loan Investment 承担。

一笔Facility有多个Investmentc承担。

Loan  Investment(贷款投资)是一个派生对象,用来表示某一投资者在Loan(贷款)中所承担的股份,它与
投资者在Facility(信贷)中所持有的股份成正比。

模型迭代一

迭代的原因:

在提取(Drawdown)贷款时,信贷股份仅仅是放贷方投入金额的指导原则。当借款者(borrower)要求提取贷款时,银团领导者会通知所有成员按各自的股份进行支付。收到通知后,投资者通常会按自己的股份来支付,但是有时他们也会与银团其
他成员协商,以求少投入(或多投入)一些
。于是我们在模型中添加了LoanAdjustment(贷款调整)以反映这一事实

注意:Facility仅仅是多个投资方(Inverstment)投入金额的指导原则,而非实际。

作者在此处,遇到两个问题:

  1. 模型的复杂度不断增加,无法从模型中提炼出真正健壮的功能。
  2. 无法解决四舍五入带来的精确性问题,作者怀疑自己的基本设计出现了问题。

模型迭代之突破

突然领悟到的问题所在:

我们在模型中把Facility的股份和Loan的股份绑定到一起,而这种方式并不适用于实际的业务。这一发现得到了广泛的认可

Loan的股份和Facility的股份可以在互不影响的前提下独立发生改变。

利用模型图,进行走查,确定认知是否正确:

这张图表明Facility的总额是1亿美元,而借款者选择从中提取的第一笔Loan金额是5000万美元。3个放贷方按照各自原先承诺的Facility的股份来支付,这样5000万的Loan就被分配到了这3个放贷方头上。

借款者又提取了另一笔3000万美元的货款,这样他的未偿Loan就达到了8000万美元,依然在Facility的1亿美元限额之内。这次,公司B决定不参与Loan,而由公司A来承担这部分额外的股份。各个放贷方在借款者提取贷款的过程中所支付的股份反映了它们的投资选择。当Loan的提取额不断增加时,Loan的股份份额就不再与Facility的股份成比例了。

当借款者偿还Loan时,所偿还的金额会根据Loan的股份分配给各放贷方,而不是根据Facility的股份来划分。同样,利息支付也会按照Loan的股份进行分配。

 

当借款者为享有Facility权而支付费用时,这笔钱是按照Facility的股份划分的,而不考虑放贷方是否借出了钱。Loan不会因费用支付而发生变化。

更深层次的模型

深层理解:股份无处不在,任何可分配的价值都是股份。

模型迭代之总结

  1. 当突破带来更深层的模型时,通常会令人感到不安。与大部分重构相比,这种变化的回报更多,风险也更高。而且突破出现的时机可能很不合时宜。
  2. 过渡到真正的深层模型需要从根本上调整思路,并且对设计做大幅修改。在很多项目中,建模和设计工作最重要的进
    展都来自于突破。
  3. 应专注于知识消化过程,同时也要逐渐建立健壮的UBIQUITOUS  LANGUAGE。寻找那些重要的领域概念,并在模型中清晰地表达出来。精化模型,使其更具柔性,提炼模型。