實踐DDD,發票管理

Jianken發表於2008-07-01
現在有如果一個示例業務,是從真實業務中抽象出來的,大家考慮一下,用DDD的方法如果來設計 domain model 和service.

發票管理
發票 ,每一張發票有金額,日期,銷售方,購貨方等
爭議 ,是對發票而言,每一個爭議有:日期,原因,現在狀態,爭議的金額,爭議的發票。

業務規則:
1. 一張或者多張發票可以引起一個爭議。
2. 一個爭議中的發票可以單獨解決。如果這張發票是爭議中的最後一張未解決的發票,則這個爭議同時解決。
3. 如果一個爭議解決,則所有與這個爭議相關的發票全部成為沒有爭議的。
4. 當一張發票被支付以後,如果這張發票上有爭議,則從相應的爭議中把這張發票移去。如果這張發票是爭議中的最後一張未解決的發票,則這個爭議同時解決。
5. 所有針對爭議原因的修改,都要記錄其修改歷史,並可以檢視。


最簡單的設計方法,也是最容易想到的如下:
public class Invoice {
Date invoiceDate;
double invoiceAmount ;
String Client;
String Debtor ;
boolean isDispute;
}

public class Dispute {
Date disputeDate ;
String reason ;
String narrative ;
ArrayList<Invoice> invoiceItems ;
ArrayList<DisputeHistory> history ;
Date resolveDate ;

public void ResolveDispute() {
}
public void changeNarrative(String narrative) {
}
}

public class DisputeHistory {
String narrative ;
}

public class disputeService {
public void payInvoice(Invoice invoice) {
}

public void resolveDispute(String DisputeId) {
}

public void changeDisputeNarrative(String narrative) {
}
}

這樣的設計有什麼問題嗎?

相關文章