带你读《2022技术人的百宝黑皮书》——一个搞定责任链的注解(1)

简介: 带你读《2022技术人的百宝黑皮书》——一个搞定责任链的注解(1)

一个搞定责任链的注解

image.png作者:余敦刚(玄苏)

image.png出品:大淘宝技术


 

 

本文将介绍注解版的责任链模式框架-foldright/auto-pipeline,解决繁琐业务流程手动编写责任链的开发效率&复   用等问题。

 

背景

 


在繁琐的业务流程处理中,通常采用面向过程的设计方法将流程拆分成N个步骤,每个步骤执行独立的逻辑。

 

 

public void process(params){

2

 

doFirst(params);

3

 

doSecond(params);

4

 

....

5

 

doLast(params);

6

}

 

 

但是这样剥离仍然是不彻底的,修改其中一个步骤仍然可能影响其他步骤(同一个类修改,不符合开闭原则)。在这   种场景下,有一种经典的设计模式-责任链模式,可以将这些子步骤封装成独立的handler,然后通过pipeline将其串联起来。

image.png

 


常见的责任链模式会设计如下:

 image.png

 

 

总体来看,纯手动编写有以下问题:

  1. 正确性:实现复杂度较高,短时间手工编写容易出错
  2. 开发效率:涉及多个类的实现,需要花费不少时间进行测试非业务的pipeline流程,ROI不高
  3. 复用性:不同业务流程难以复用同一套pipeline的关键代码

 

那有没有一套靠谱的框架能够解决上述问题呢?有的,它就是foldright/auto-pipeline,是责任链领域的"lombok"!

 

Quirk Start

 

下面以读取系统配置为例,读取逻辑如下:

  1. 从本地配置文件读取,读取成功则直接返回,否则执行下一步
  2. 从系统变量读取,返回对应的值

 


为了实现这个需求,读取配置接口定义如下:

 

public interface ConfigSource {
String get(String key);
  }

 

如果使用auto-pipeline,该如何

以下大部分内容引至auto-pipeline官网: https://github.com/foldright/auto-pipeline

 


  1. 引入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

相关文章
|
存储 监控 安全
数据库数据的保密性
【4月更文挑战第9天】数据库保密性关键在于限制未授权访问和保护数据不泄露。措施包括访问控制、加密、数据脱敏、备份恢复、审计监控及安全配置等,确保数据安全和用户隐私。
417 2
|
Java 测试技术 应用服务中间件
常见 Java 代码缺陷及规避方式(下)
常见 Java 代码缺陷及规避方式(下)
306 0
|
缓存 NoSQL Java
Java工具篇之Guava-cache内存缓存
常在业务系统中做开发,不会点高级知识点,有点不好意思了。在业务系统中,提高系统响应速度,提供系统高并发能力,其实方向很简单,三个方向,六个字而已: **缓存降级限流。** 当然这是在排除代码质量非常差的情况,如果代码质量很差,都是while循环和高内存占用,那么其实再怎么做都于事无补。除非你有一个马云爸爸,性能不够,机器来凑嘛。阿里云前来支持(1000台机器够了吗?)
1614 0
|
7月前
|
设计模式 算法 前端开发
【设计模式】【行为型模式】职责链模式(Chain of Responsibility)
一、入门 什么是职责链模式? 职责链模式是一种行为设计模式,它允许你将请求沿着一条链传递,直到有对象处理它为止。每个对象都有机会处理请求,或者将其传递给链中的下一个对象。 为什么需要职责链模式? 使用
300 16
|
存储 安全 关系型数据库
后端技术深度剖析:构建高效稳定的企业级应用
【10月更文挑战第5天】后端技术深度剖析:构建高效稳定的企业级应用
316 0
|
9月前
|
设计模式 XML 算法
策略模式(Strategy Pattern)深度解析教程
策略模式属于行为型设计模式,通过定义算法族并将其封装为独立的策略类,使得算法可以动态切换且与使用它的客户端解耦。该模式通过组合替代继承,符合开闭原则(对扩展开放,对修改关闭)。
|
机器学习/深度学习 文字识别 自然语言处理
深度学习之文本框检测
基于深度学习的文本框检测(Text Box Detection)是一项重要的计算机视觉任务,旨在从图像中自动检测和定位文本区域。它在光学字符识别(OCR)、自动文档处理、交通标志识别等领域具有广泛的应用。
239 2
|
存储 前端开发 搜索推荐
ClkLog基于ClickHouse 的百万日活实测报告
自 ClkLog 上线以来,我们不断吸纳用户需求,提升产品的支持能力。今年下半年,我们遇到了日活跃用户数达到百万级别的客户。为了给 ClkLog 用户提供可靠的技术建议和解决方案,同时也为了节省成本,在Clickhouse官方支持下,我们在阿里云上对 ClickHouse 社区版、企业版进行了详细测试和成本分析。
|
JavaScript API 开发工具
记一次后台管理脚手架选型过程
面对大屏支持不足的vue移动端项目,业务部门要求改进。原项目优化困难,决定重构。选型阶段,因业务类似后台管理,选择vue框架。在git和gitee上对比了两款脚手架,最终选定[ pure-admin-thin ](https://github.com/pure-admin/pure-admin-thin)因其频繁更新、先进框架和丰富文档。选型关键在于资料易得性、框架时效性和维护者信誉。欢迎评论区提供反馈和建议。
432 1
|
缓存 Java Spring
Guava缓存工具类封装和使用
Guava缓存工具类封装和使用
411 0