Domain Model:業務對象的進一步設計

來源:互聯網
上載者:User
Author :  Anders小明
同步自: http://www.blogjava.net/AndersLin/archive/2006/10/09/74187.html

        在Domain Object的動靜之分中,其實我已經把業務對象分為三大類,不過在那一部分中沒有明確的提出。這三大類是Party,Product和Contract。 
        Party 
        包括Party對象和Role對象。 
        Party代表業務發生對象的實體,而Role對象不僅僅是承擔的相應的責任,同時也是Party在具體業務中一個側面,因此除了責任還有保持一些實體業務關係的子集。例如:Party擁有多個Address和多個account,其中一個role只使用其中一個address和一個account。 
        Role的分類有兩種。從性質來分,可以分為Individual和Organization;從業務來分Customer、Provider以及位於中間的Agency(以及Employee等)。 當然還要根據業務在進一步做細粒度的建模。
        不是所有的系統都需要Role的。在一些系統中對party和role的概念區分並不強烈,例如在一些普通的BBS或者CMS系統中,party和role一一對應,通常只設計role而忽略party,或者說直接把role對象party化。但在另一些系統中則不一樣,例如:在保險系統中,一個Party同時擁有多種Role是很普遍的;在eBay或者TaoBao等C2C系統中,一個Party既可以是Buyer也可以是Seller。
        Role和Role之間的relationship是一個很大的邏輯。例如:Employee是有上下級關係的;Agent是有introducer的。Relationship的執行個體化有兩種手段:一種是在role對象中建立,另一種利用獨立的一個relationship對象。 
        和Party關聯的是另一大類對象Holding,不過Holding對象體系比較特殊,在金融行業中Holding是一個關鍵的對象體系,而在其它行業中,Holding則不那麼重要,只是簡單的一個account記帳功能。 
  
        Product 
        Product對象比較麻煩,在金融行業看起來像另外一種contract。不過在B2C或C2C的電子商務中,Product則是代表現實世界中的商品。 
        Product分為兩類:main和rider。Main product可以被單獨出售,而rider不能。這個實際上是一個固化的Package規則。 
        還有一類Product比較特別,或者稱為Package Product,是幾種product打包一起,它擁有與product相同的屬性和行為。 
        Product對象域包括兩部分邏輯:Product的Package規則,以及Product的計價邏輯。 
        Product的Package規則。比如:rider product只能作為附屬品被售出;一些Rider Product只能和特定的main product綁定銷售;一些product不能同另一product同時銷售;一些product一次最多買5份。 
        Product的計價邏輯包括兩個層次:Internal和External。Internal表現為根據自身條件判斷,如時間,折扣等級等;External則和contract中其它product相關,如:其它product總價超過一定價格就獲得額外折扣;或者同一個product份數超過3份就擁有一定的折扣。 
        通常External建立在Internal之上,其關係有兩種,override和additional。Additional關係比較常見,通常是額外的折扣。 
        計價邏輯的實現手段有兩種:一種是Rate Table,另一種是Formula Engine。對於Internal層次的來說,Rate Table比較常見。 
        Product對象的這兩個邏輯都或多或少的與Contract相關聯。如同《分析模式》中描述的Quote那樣,這兩個邏輯將是獨立的Specification。 
  
        Contract 
        Contract是核心業務系統的關鍵。通常一個業務上的contract包括一系列的子contract。同時Contract又有多種類型。同product一樣,contract可以分為main contract和rider contract。典型的如Payment Agreement, Deliver Agreement都是rider contract。 
        同Product一樣,Contract域包含兩個邏輯,contract的package規則和計價邏輯。 
        不同類型的Contact包括不同的子contract。例如:保險系統中ILP和UP就包含了不同的子contract。 
        Contract也擁有計價邏輯,而且通常和sale channel相關,如:通過網路定購給予一定優惠。其與Product的計價邏輯通常是additional的關係,override非常罕見。 
        同Product一樣,計價邏輯的實現手段也是Rate Table和Formula Engine。但對於Contract這一層次的來說,Formula Engine比較常見。 
        一個contract不可避免的包含一個或多個Product,不過這裡的Product和上面的Product不同,稱為contract product加以區別,表現為:雖然product在定義層面已經規定了大量的責任關係(操作範圍),當這些product被包含到contract中,通常會被參數化(子類型化),當然也有沒有被參數化的情況,可以看作一個特例。 
  
        由於Contract是核心業務系統的關鍵,Main Contract關聯一個Life Cycle對象。如前所述,Life Cycle對象將是系統核心商務程序的驅動核心。另一個與Contract關聯的是Request對象。 
        出於後期進行業務回查,以及資料採礦的需要,除了Contract Product,還需要記錄所有相關Party在業務發生時的狀態,即所謂的曆史資料。 注意,這些資料並不是冗餘資料。
         
        BTW:考慮金融市場下的,金融產品是虛擬,它本身就是一個合約,包含了一系列的操作範圍--責任。注意在這個情況下:一個product包含了一系列的操作範圍--責任,從外部看,也呈現了一個完整的概念。而這與role的結構是很像的。雖然contract和product很自然的看成是include的關係,然而由於product本身是個完整的概念,使得我們可以反過來看,product修飾了contract。一個保單包含了不同的party,而保單中的保險產品修飾了保單--描述了不同party的責任關係。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.