converter设计模式扩展,多种输入输出与标准输入输出的转化方案
需求背景
一般情况下B端应用系统会对接多个用户,不同用户在入参出参格式、应用系统处理方式、出参返回时机,甚至异步出参等方面不尽相同。针对应用系统的标准入参出参和多用户入参出参的差异,需要一个中间件来实现入参出参的转化。converter设计模式是实现这种转换的框架模型,然而在具体的应用系统下需要基于converter模式做出扩展已适应具体的需求。
下图是一种基本的B端系统请求模式
其中的A类型的出参和B类型的出参包含两层含义:同步出参和异步出参。橙色部分的参数转换器是本文讨论的主题
converter设计模式
简单复习一下converter设计模式,详细讲解文章(带源码)
上图是简化版的converter模式类型。Converter是接口,其中使用了java8的语法Function<U, T>, 具体的转换细节代码由开发者自己实现Function<U, T> 完成。PersonConverter是接口的实现,实现从PersonDto到Person的转换功能。
抽象来看,converter模式就是这么简单。
扩展converter设计模式
在converter模式的基础上要实现多用户的入参,出参,甚至异步出参的需求,要对模式做一定的调整。
上图是针对“背景需求”中多用户请求模式的解决方案的类图。先不要头皮发麻,逐一讲解一下。
注意类图中的有很多接口和虚拟类,其目的都是为了抽象,为多用户,甚至多流程开发提供的抽象
- InputHandler 和 OutHandler
这两个是接口类,与converter模式中的Function<U, T>的作用是一样的。由用户自己实现转换的细节。 - InputDuplexConverter
从名称上解释:输入全双工转换器。职责是入参处理和同步出出参处理。这是个抽象类,成员变量中有inputHandler和OutHandler - AInputDuplexConverter
继承InputDuplexConverter的抽象类,什么还是抽象类呢?可以理解为,把A用户的一些公共功能写到这个类型。 - ARInputDuplexConverter
继承AInputDuplexConverter类, 是具体实现,其中的两个变量是: AInputHandler和AOutHandler类,也就是处理A的输入和同步输出
整个入参处理和同步出参已经介绍完毕,总体来说是converter模式的扩展,通过虚拟类把公共部分抽象出来。
同样异步出参的处理是上半部分。包括:ANoticeInputHandler , ANoticeOutHandler, OutDuplexConverter, AOutputDuplexConverter 。结构类型,大家类比看吧
总结
设计模式, 数据结构, 算法等都是对程序员很基础又重要的知识。在实际问题及解决过程中,都是在此基础上,针对实际问题提出解决方案。针对应用系统的标准入参出参和多用户入参出参的差异,而提出的多种输入输出与标准输入输出的转化方案,是基于converter模式扩展来的。
希望对大家有帮助,如需进一步交流,可以留言或留下联系方式,一起多探讨进步。