实践DDD,发票管理

08-07-01 Jianken
现在有如果一个示例业务,是从真实业务中抽象出来的,大家考虑一下,用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) {

}

}

这样的设计有什么问题吗?

         

banq
2008-09-17 08:21
这是一个根据不同条件设立对象关系的案例。

模型相对简单,条件逻辑判断多一些,可以使用ddd中的规格spec来实现,这个部分核心不应该在service中,而是Domain层。

猜你喜欢