模板方法
模板方法
很多情况下代码中的业务都可以抽象出一个模板去解决,这时候经常需要用到模板方法。大家经常接触到的是一些业务方法的抽象模板,比如在计算优惠券的流程当中总是有一定的步骤:
(1)先计算该商品是否可以拥有优惠券信息
(2)再为该商品绑定优惠券信息
(3)最后回调或者通知向下的流程
今天要记录的是一个通用服务层的模板方法,包含了前置校验、后置处理(是有点像拦截器= =)、finally操作。
业务processor
- 可以定义一个domainProcessor去代表业务操作的processor接口,这个接口可以承接泛型。
1 | public interface DomainProcessor<T> { |
这里承接的泛型context是一个上下文的概念,指的是在一个业务处理processor中的上下文信息,其中可以有计算的参数,计算的结果和一些中间信息。
- 做一个抽象类,去将其中的前置操作、biz操作、后置操作、finally操作定义出来。
1 | public abstract class AbstractProcessor<T> implements DomainProcessor<T> { |
可以看到,这里定义了前置操作,这里可以去对biz要用的参数进行一个校验或者一些前置操作,同时将biz定义为了抽象方法,意图在为了让子类去继承时一定要去实现bizHandle这个方法。而exceptionHandle和finallyHandle方法则定义了异常的处理和最终要做的(比如线程快照的清除)。而整个process方法其实就是整个处理器的入口,即对这整个流程的一个编排。
可以看一个这个模板processor的的具体实现和测试类:
1 | public class AbstractProcessorTest { |
总结
这个模板可以作为之后一个处理器的抽象模板,能让代码逻辑很清晰的展现出来,也能解耦了各个处理模块,这里可以总结下。