Java应用架构设计的七次重构详解
在开发系统时,虽然一个很小的系统,开始时它也是粗粒度和重量级的模块;当特定的需要出现时,我们将会把较大的模块儿拆分为较细粒度和轻量级的模块,他们会处理特定的功能性和非功能性需求。而七次重构就是从一个系统出发,根据软件使用中不断出现的新需求教你如何实现一个灵活的应用架构。
下面以开发一个处理账单支付的系统为例进行讨论。在支付账单前,系统需要根据与领款人写协议,针对这个账单采用一个折扣率(我们将这个过程称为审核账单)。计算这个折扣率需要使用到第三方供应商进行计算。另外还需要与遗留的财务系统进行集成,将会为这个系统提供用于对账的支付信息。随着开发过程的进行,我们将不断重构,不断完善细节。
原始版本
类图如下
从类图中可以看到,有一些使用Struts的Action和ActionForm类。还有一些Java ServerPage(JSP)在这里没有进行展示。Customer类有一个Bill实例的列表,每个Bill分别有对AuditFacade和Payment类的引用。AutitFacade会集成第三方供应商的软件计算折扣,Payment类会集成一个遗留的财务系统。注意Bill类与AuditFacade之间的双向关联;后面我们会处理这种问题。
第一次重构
物理分层模式:对于真有分层的系统,我们可以将每层拆分为一个独立的模块,而且上层模块依赖低层模块,但不能相反;我们只需要修改构建脚本就能将分