经人提醒这一年写的文章不多,一方面是因为同类的技术如果没有自己的体会不写,太我简单的也不写。去年多在学习各种各样的新接触的技术,还没有足够的经验与体会总结。最近对各种已有技术的集成方面,总结点个人经验。
一、问题来源
比如当我们的系统需要引入日志产品时,已经有多种日志的实现了,比如log4j,logback,还有日志门面slfj等,我们不需要自己会开发,但我们需要根据不同的条件,或者配置,或者参数,使用其中某一个具体的实现。而对上使用日志的上层,需要屏蔽具体产品的不同,需要抽象出一个通用的日志对象模型。
二、解决思路
如下图所示:
- 对产品A,B所涉及到的类进行了适配,简单的说就是持有对应的类,每一个都进行了代理,从而有了产品A、B的适配。(绿色)
- 由于调用客户端对具体实现的变化无感,所以要把适配的类都实现相同的接口,这样客户端只调用接口就行了。(绿色)
- 需要一个类对不同的适配进行管理,一般就有一个manager类。(红色)
-
三、示例
1. dubbo作为微核心架构,具体实现都进行了集成,并通过extension进行加载。这里是比较简单的log部分。
- 左边目录有4个具体的实现,每一个里面都包含两个适配类,包装了我们单独用时的logFactory与log
- 外层目录主要有3个类,Logger/LoggerAdapter分别是上面说的两个类的接口。
- LoggerFactory类似上图中的manager类。它根据配置加载具体的实现的适配类。
其实我更愿意把每个实现中的叫*logAdapter/*logFactory,把外层的LoggerFactory叫LoggerManager。
- logFactory的适配类中得到一个log还是用具体原产品中的实现,再包装成自己的log适配类
- log适配类的各种操作,都用的原产品中的实现。
2. dubbo中另一个例子
- 同样有一个适配包,里面有所有类的适配类,通常叫api包
- 这里的manager是一个@SPI加载的适配类,它会动态从源码编译并加载到系统中,会根据URL中的参数,选择真正的序列化管理类Serialization。
- hessian2的Serialize会产生一个适配了Hessian2Output(原产品类,是阿里改良的)的类。各种write操作,实际都是用内部原产品的类来做。
四、其它关联的情况
- dubbo中进行了全面的集成,其它地方还没看到这么多,非常有学习价值。
- 除了人家做好各种产品,我们来适配,不如先做好标准api,大家按标准实现。这方面就比如java.sql标准了。DriverManager就是一个总的管理,通过getConnection()得到一个实现Connection接口的具体实现,进而得到各种其它接口的实现。
- 阿里的druid连接池,为了做监控,要在sql的所有api的接口上,再包装一层,内外层之间再加上过滤器(责任链模式)。执行外层的时候,先执行过滤再执行内层。过滤器这种模式用的很多,web应用的filter就是最常用的。做重要业务中,要考虑到未来的扩展,中间加上可配置的过滤器,未来有新功能就改动很少。spring中的bean的生命周期中,也都会插入一些用户可配置的额外处理,所以满足各种特殊的变化要求。
- 当然过滤器是静态的链条,常用的interceptor也是静态的。如果是动态代理,那也可以在代理类与真正类之间做很多事情,比如真正类前用缓存,比如真正类执行后,根据结果降级,或者进行TCC(分布式事务方案之一)补偿。
- 适配后的manager中经常要缓存一下用到的适配类。
- 一些代理中间件,比如代理读写分离的估计原理都差不多。大的功能完善的就是更动态选择,或者多种选择策略,中间再插入用户可配置的处理,比如性能统计,时间统计,校验...。
后面提到的一些关联情况,因为有些也没有细看,凭着经验写的,如有错误欢迎指正。
分享到:
相关推荐
文献综述是对已有的相关研究和资料的总结,可以帮助学习者理解当前领域的理论基础,找到项目设计的依据,以及了解可能需要改进或创新的地方。 通过这个项目,无论是初学者还是有经验的开发者,都可以深入了解ASP...
《文献综述02.doc》可能包含了作者对高校学生信息管理系统领域相关研究的总结,讨论了已有的解决方案、存在的挑战以及该系统可能带来的改进。 外文翻译文档,如《外文翻译.doc》,可能是对国外同类系统或技术的介绍...
1. 功能需求:系统应包含商品管理、订单处理、支付接口集成、用户管理、报表统计等多个模块,满足商家日常运营需求。 2. 系统总体建设:系统需具备良好的用户体验,支持多种设备访问,并具备高可用性、可伸缩性。 3....
在国内外,已有一些高校采用了类似的导师信息管理系统,但这些系统往往功能单一,更新不及时,无法满足现代社会对快速、准确信息查询的需求。JSP(JavaServer Pages)技术,结合Struts2框架和MySQL数据库,已经成为...
- 国内外已有众多成熟的地图应用,如Google Maps、百度地图等,但仍有创新空间,例如在用户体验、功能集成或个性化服务上进行提升。 3. **Android系统相关技术**: - **开发语言**:主要使用Java或Kotlin作为开发...
这对于习惯于MATLAB语法的科研人员来说,可以无缝对接到已有的代码和工作流程,提高工作效率。 4. **C语言实现**: C语言因其运行速度快和内存管理灵活而常被用于编写底层算法。PyEMD-master采用C语言实现EMD算法,...
1. 网站架构与内容:已设立7个一级栏目和30个二级栏目,内容丰富,注重规范化和标准化。未来应继续强化内容更新,增加热点新闻、视频、图片报道等多元化展示,提升用户体验。 2. 用户体验:优化导航,增设在线客服...
技术开发状况显示,当前市场上已有部分成熟的物流管理系统,但针对医药快批的定制化解决方案仍有待提升。现有产业规模不断扩大,迫切需要高效、合规的管理工具。 二、项目产品与性能 医药快批物流管理系统主要服务...
本文将基于详尽的调查研究,辅以丰富的图文资料,深入分析神华神东在信息化建设中的具体模式与实践策略,旨在为同类煤炭企业及其他行业从业人员提供有价值的参考。 #### 二、信息化建设背景 ##### 2.1 集团公司...
本报告旨在详尽分析理财系统软件的可行性,从技术、经济、法律和社会等多个角度进行深入探讨。理财系统工程的目的是为了提供一个高效、安全且用户友好的平台,帮助个人及家庭进行资产管理、投资规划和财务分析。工程...
模块级可靠性模型则是在元件级模型的基础上,考虑多个元件之间的连接方式以及相互作用,通过串联、并联等方式组合而成。这类模型能够更准确地反映复杂系统的可靠性特征。 ##### 3.3 整机级可靠性模型 整机级可靠性...
### YzmCMS内核简约时尚Blog自媒体主题模板详解 #### 一、引言 ...无论您是初学者还是有一定经验的开发者,都可以轻松上手并迅速搭建出一个既美观又实用的个人博客或自媒体平台。希望本文能对您有所帮助!
电气自动化技术专业评审汇报主要涉及了专业建设的多个方面,包括专业建设团队、专业定位、教学资源建设、人才培养方案、重点课程建设以及存在的不足。以下是对这些内容的详细阐述: 1. **专业建设团队**: 专业...
此外,还要求有计算机信息系统集成二级及以上资质,并有同类项目业绩。 5. 合同条款:交货日期为合同签订后的90个日历天,需在##省##市矿区机关完成安装调试。合同通用条款和专用合同条款详细规定了双方权利和义务...
《市场调查与预测》是一门涉及商业决策的重要课程,它涵盖了市场研究的多个核心概念和技术。以下是基于课程内容的关键知识点的详细阐述: 1. **描述性调查**:这是市场调查的一种基本类型,主要目的是描述市场现状...
- **大亚湾经济区**:集成了石油化工、新能源等多个产业,是惠州经济发展的重要引擎。 **1.5 惠州市在珠三角的地位和作用** - **战略位置**:作为连接粤东与珠三角的重要节点,对于促进区域协调发展具有重要作用。...
- **升级安装**:如果已有旧版本的BackTrack5,可以通过官方提供的方法升级到最新版本。 - **更换桌面背景**:通过简单的操作即可更改系统的桌面背景,提升用户体验。 - **从Ubuntu切换到BackTrack5**:针对已经习惯...