領域驅動設計-讀書筆記-第八章-突破

本章,重點通過作者舉實際例子,說明是如何一步步從小的領域模型改動,突破到大的領域模型改動,並帶來的收益和成本。

突破與時間/價值的趨勢圖:

需求:

假如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。尋找那些重要的領域概念,並在模型中清晰地表達出來。精化模型,使其更具柔性,提煉模型。