- 從需求文件找出物件(訪談記錄或使用案例敘述)
- 人 – ex. 顧客、員工。
- 地 – 可以想成是包含其它物件的容器(Container)。ex. 旅館、商店、銀行。
- 事物
具體(tangibility) – ex. 收銀機、產品項目(item)。
抽象(abstraction) – 產品規格(product-specification)、資料庫的連線(connection)、訊息(message)。 - 時 – 紀錄在某個時間點所發生的事件。ex. 訂購(order)、訂房(reservation)。
- 直接從企業領域的核心本質來建構領域物件模型 – 交易(Transaction)
- 應用 Peter Coad 的 “Transaction Pattern” [Coad, Object Models, 1997]
- 需與專精該問題領域的專家(Domain Expert)作密切地溝通,以更能深入瞭解該領域的交易核心本質,並將其轉化為軟體模型。
圖1、An overview of transaction patterns
(縮略圖,點擊圖片鏈接看原圖)
圖2、Participant—Transaction
Participant—Transaction 範例
- 客戶—訂購(Customer—Order)
- 客戶—銷售 (Customer—Sale)
- 學生—註冊(Student—Register)
圖3、Place—Transaction
Place—Transaction 範例
- 商店—銷售(Store—Sale)
- 飯店—訂房(Hotel—Reservation)
圖4、Transaction—Transaction LineItem
Transaction—Transaction LineItem 範例
- 銷售-銷售細項(Sale-Sale LineItem)
- 訂購-訂購明細(Order-Order LineItem)
- 出貨-出貨明細(Shipment-Shipment LineItem)
圖5、Transaction—SubsequentTransaction
Transaction—SubsequentTransaction 範例
- 購物-付款(Shopping-Payment) 購物交易可以分期付款。
- 訂購-出貨(Order-Shipment) 一個訂購交易可以分次來出貨。
圖6、SpecificItem—Transaction
SpecificItem—Transaction 範例
- 具體特定的收銀機—銷售(Specific-Register—Sale)
- 具體特定的銀行—存款(Specific-Bank—Deposit)
圖7、SpecificItem—LineItem Pattern
SpecificItem—LineItem Pattern 範例
- 錄影帶—出租細項(VideoTape—Rental LineItem)
- 具體特定的產品—訂購細項(Specific-Product—Order LineItem)
圖8、Item—LineItem Pattern
Item—LineItem Pattern 範例
- 項目—交易細項(Item—LineItem)
- 項目—出貨細項(Item—Shipment LieItem)
圖9、Item—SpecificItem Pattern
Item—SpecificItem Pattern 範例
- 產品規格—產品(Product-Specification—Product)
- 影片型錄—錄影帶(Video-Description—Videotape)
圖10、套用 Transaction Pattern — 漫畫店租借系統的領域模型
Kenming你好:
以漫畫店租借系統為例,按照您文中的內容,我認知specific Item,他是「編號1943收銀機」(transaction-specific item),也是「城市獵人第一集」(item-specific item),也是漫畫(line item-specific item);請問我這樣的認知對嗎?
「編號1943收銀機」應該比較像是「Place」。
「城市獵人第一集」則像是「item」。
「城市獵人第一集漫畫」才是「specific_item」(前提是該出租店的城市獵人第一集有兩本以上)。
Hi alvinwu:
是的,感謝您的糾正。 ^^
圖四與圖五是否貼反了?
Hello DU:
並非寫反,Peter Coad 有他自己語法的表達。 🙂
克明兄
首先謝謝您提供這麼豐富的資產在網路上供大家參考學習.個人在此學習到很多無限價值的觀念和看法.
今天剛好看到此文,雖然po上去已經兩年了.裡面圖一,二,三…好像”多重性”寫反了?
DU
Hello SaGa:
1. 以目前個人的認知,問題領域的核心本質源自於 “Domain Concepts”。以此為基本來建構軟體系統,彈性度會比較理想。
2. 我曾經寫了一篇 “何謂交易” ,您可以以此為搜尋該篇文章參考我個人對交易的定義。
3. 那是不一定的。 從現實的交易行為就可以瞭解到,是否需要 Sub-Transaction 以及 Sub Transaction-LineItem,不是絕對的必要。
Kenming您好,在看了Transaction Pattern 之後
有三個問題請教
(1)何謂企業領域的核心本質?
(2)交易(Transaction)如何定義?
(3)SubsequentTransaction LineItem在在的價值?
一定要存在嗎?
謝謝.