责任链模式实践
坏味道代码
最近在开发过程中需要修改这样一段代码:
InvoiceSubmitter invoiceSubmitter;
if (isBizBook) { // 图书业务
if (isVatInvoice) { // 增值税专用发票
invoiceSubmitter = rjVatInvoiceSubmitter;
} else { // 增值税普通发票
invoiceSubmitter = rjGeneralInvoiceSubmitter;
}
} else {
invoiceSubmitter = commonInvoiceSubmitter; // 通用发票申请
}
invoiceSubmitter.submitRequisition(order);
关于 InvoiceSubmitter 类图如下:

OrderFinishSupport 直接关联 InvoiceSubmitter 接口,AbstractInvoiceSubmitter 实现 InvoiceSubmitter 接口的 submitRequisition 方法封装通用逻辑,并定义另外一个重载的 submitRequisition 方法供子类实现具体业务逻辑。
业务逻辑
这是一段发票提交的逻辑,在我们系统的订单完成之后,需要根据用户提交的发票内容调用不同的接口将发票信息提交到发票系统,发票系统来完成为用户开具发票的工作。
这段代码目前看起来还算清晰,就是根据业务和发票的类型判断调用哪个接口,但是这次需要修改这段代码,加上分支判断逻辑区分另外一种业务,未来还会承接更多的需求,这样这段代码的条件分支判断会越来越庞大,可读性会越来越差,也越来越难维护。
具体设计
This chapter requires login to view full content. You are viewing a preview.
Login to View Full Content