實踐DDD,發票管理
現在有如果一個示例業務,是從真實業務中抽象出來的,大家考慮一下,用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) {
}
}
這樣的設計有什麼問題嗎?
發票管理
發票 ,每一張發票有金額,日期,銷售方,購貨方等
爭議 ,是對發票而言,每一個爭議有:日期,原因,現在狀態,爭議的金額,爭議的發票。
業務規則:
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) {
}
}
這樣的設計有什麼問題嗎?
相關文章
- DDD實踐反思
- 如何實踐DDD?
- 如絲般順滑:DDD再實踐之類目樹管理
- C++發票識別、發票查驗介面示例,您的“發票管理專家”C++
- 火山引擎A/B測試平臺的實驗管理重構與DDD實踐
- 可落地的DDD程式碼實踐
- 使用函式式語言實踐DDD函式
- 實踐ddd,太讓人沮喪了。。
- 財務建模最佳實踐 - DDD相關建模
- 最佳實踐丨雲開發CloudBase多環境管理實踐Cloud
- React開發管理後臺實踐1React
- 領域驅動設計(DDD)實踐之路(一)
- Axon框架快速入門和DDD專案實踐框架
- COLA 4.x和DDD專案實踐精粹
- 數電票如何查驗、管理?C#發票查驗介面整合C#
- 阿里DDD專案最佳實踐-COLA 架構總覽阿里架構
- PHP 開發的 API 多版本管理實踐PHPAPI
- 西安開票,西安開發票
- 成都開發票,成都開票
- 佛山開發票-佛山開票
- 西安開發票,西安開票
- 廣州開票,廣州開發票
- 佛山開發票,佛山開票
- 當DDD遇到專案管理專案管理
- 成都哪開發票-成都開票
- 去哪兒網領域驅動設計(DDD)實踐之路
- 大型商業銀行主機架構轉型DDD實踐架構
- Django Admin後臺管理:高效開發與實踐Django
- 蘇州開發票,蘇州開票
- Elasticsearch 索引容量管理實踐Elasticsearch索引
- Flutter 狀態管理實踐Flutter
- lerna管理前端模組實踐前端
- Git 最佳實踐:分支管理Git
- 管理實踐之輔導
- Golang 高效實踐之併發實踐Golang
- 領域驅動設計DDD和CQRS架構模式落地實踐架構模式
- 服務發現與配置管理高可用最佳實踐
- 呼和浩特哪開發票-呼和浩特開票