一个搞定责任链的注解
作者:余敦刚(玄苏)
出品:大淘宝技术
本文将介绍注解版的责任链模式框架-foldright/auto-pipeline,解决繁琐业务流程手动编写责任链的开发效率&复 用等问题。
背景
在繁琐的业务流程处理中,通常采用面向过程的设计方法将流程拆分成N个步骤,每个步骤执行独立的逻辑。
public void process(params){
2 |
|
doFirst(params); |
3 |
|
doSecond(params); |
4 |
|
.... |
5 |
|
doLast(params); |
6 |
} |
|
但是这样剥离仍然是不彻底的,修改其中一个步骤仍然可能影响其他步骤(同一个类修改,不符合开闭原则)。在这 种场景下,有一种经典的设计模式-责任链模式,可以将这些子步骤封装成独立的handler,然后通过pipeline将其串联起来。
常见的责任链模式会设计如下:
总体来看,纯手动编写有以下问题:
- 正确性:实现复杂度较高,短时间手工编写容易出错
- 开发效率:涉及多个类的实现,需要花费不少时间进行测试非业务的pipeline流程,ROI不高
- 复用性:不同业务流程难以复用同一套pipeline的关键代码
那有没有一套靠谱的框架能够解决上述问题呢?有的,它就是foldright/auto-pipeline,是责任链领域的"lombok"!
Quirk Start
下面以读取系统配置为例,读取逻辑如下:
- 从本地配置文件读取,读取成功则直接返回,否则执行下一步
- 从系统变量读取,返回对应的值
为了实现这个需求,读取配置接口定义如下:
public interface ConfigSource { String get(String key); }
如果使用auto-pipeline,该如何
以下大部分内容引至auto-pipeline官网: https://github.com/foldright/auto-pipeline
- 引入Maven依赖
<dependency> <groupId>com.foldright.auto-pipeline</groupId> <artifactId>auto-pipeline-processor</artifactId> <version>0.2.0</version> <scope>provided</scope> </dependency>
带你读《2022技术人的百宝黑皮书》——一个搞定责任链的注解(2)https://developer.aliyun.com/article/1339676?groupCode=taobaotech