不管一个类库或者工具方法实现多么的好,如果无法做到向后兼容性,通常会给用户带来很大的升级成本,很多对此的依赖如果希望在后续的升级和维护期间使用该类库的其他新增特性或者好处,将不得不推迟升级亦或是被迫接受改变。

无论这个类库实现的多么完美或者流行,如果版本升级意味着大量API或者包名的变更,我认为很大程度上是因为设计者意识到从维护的角度来说,这个类库的实现非常的糟糕,以至于已经非常的难以维护下去了。

在开源的社区,做这种变更或者说犯这种错几乎不需要付出任何成本,所以很多的类库甚至非常流行的类库都有发生大版本间API的完全重构,如果是商业类库,除非有适配API,恐怕用户都跑光了。常见的类库有如下:

jackson:

1.x:org.codehaus.jackson

2.x:com.fasterxml.jackson

由此带来的是大量类路劲的变化,spring HttpMessageConverter针对1.x和2.x的分别实现;到了spring 4.x,MappingJacksonHttpMessageConverter又被spring给删除了。

dbcp:

1.x:

2.x:

apache.common.lang:

2.x:

3.x:

log4j :

1.x:

2.x:

common.pool

1.x:

2.x:

netty:

4.x:

3.x:

不过主流的容器和应用服务器以及数据库则做的好的多,比如tomcat/nginx/mysql/postgresql/rabbitmq。

转载于:https://www.cnblogs.com/zhjh256/p/5977319.html

API的非向后兼容性无论如何通常代表着一种比较差的设计相关推荐

  1. 非递归后序遍历二叉树总结(2种方法)

    算法 非递归后序遍历二叉树总结(2种方法) @author:Jingdai @date:2020.12.04 传送门 非递归先序遍历二叉树 非递归中序遍历二叉树 方法1 非递归用栈来辅助遍历,后序遍历 ...

  2. 愚弄dnn_不要被泛型和向后兼容性所愚弄。 使用泛型类型

    愚弄dnn 最近,我与jOOQ的早期客户Ergon的 Sebastian Gruber进行了非常有趣的讨论,我们与之保持了密切联系. 与Sebastian交谈使我们的工程团队得出了一个结论,即我们应该 ...

  3. 不要被泛型和向后兼容性所愚弄。 使用泛型类型

    最近,我与jOOQ的早期客户Ergon的 Sebastian Gruber进行了非常有趣的讨论,我们与之保持了密切联系. 与Sebastian交谈使我们的工程团队得出结论,认为我们应该完全重写jOOQ ...

  4. 你被骗了!Kubernetes 的核心是 API 而非容器

    本文论述了 Kubernetes 的核心价值是其通用.跨厂商和平台.可灵活扩展的声明式 API 框架, 而不是容器(虽然容器是它成功的基础):然后手动创建一个 API Extension(CRD), ...

  5. K8s 的核心是 API 而非容器:从理论到 CRD 实践

    ❝ 本文转自 ArthurChiao's Blog,原文:https://arthurchiao.art/blog/k8s-is-about-apis-zh/,版权归原作者所有.欢迎投稿,投稿请添加微 ...

  6. java 向后兼容性_关于java:JDK“向上”还是“向后”兼容?

    向后二进制兼容性(或向下兼容性) - 使用旧版本库API构建的客户端在新版本(wiki)上运行的能力. 向上二进制兼容性(或向前兼容性) - 使用新版本的库API构建的客户端在旧版本(wiki)上运行 ...

  7. 二叉树路径应用举例(基于非递归后序遍历)

    #include "stdafx.h" #include <iostream> #include <fstream>using namespace std; ...

  8. 兼容性向前还是向后_向后兼容性与向前兼容性

    兼容性向前还是向后 When building a client-server application, the client and server need to agree on how to t ...

  9. xbox360游戏下载_完成的乐趣-通过Xbox向后兼容性探索旧游戏

    xbox360游戏下载 I'm on vacation for the holidays and I'm finally getting some time to play video games. ...

最新文章

  1. centos 日志切割_CentOS下的日志切割
  2. 数据预处理常用技巧 | 数据分析中如何处理缺失值?(文末福利)
  3. Mac下python3配置opencv3 3和Mac下单独opencv的配置以及iOS下配置opencv
  4. response设置content-type
  5. 环路的产生及RIP防环机制
  6. C#中ManualResetEvent用法简介
  7. 使用.NET Remoting开发分布式应用——基于租约的生存期(转载)
  8. UnicodeDecodeError(转)
  9. 复杂性思维第二版 二、图
  10. 电商设计师套用PSD分层模板,玩转详情页的!
  11. 设置自定义ASP.NET服务器控件TagPrefix的几种方法
  12. Ubuntu14.04下中山大学锐捷上网设置
  13. 即时通讯安全问题大曝光
  14. ZOJ4037 Peer Review
  15. 局域网打印机共享怎么设置_XP系统设置局域网共享打印机的操作步骤
  16. 光凭求职技巧如何可以突围?
  17. 解决“任务管理器已被系统管理员停用”的问题
  18. MIT推出3D全息图生成新方法,可在智能手机上实时运行
  19. 用户体验设计师面试中可能会问及的10个高频问题
  20. google map 地理编码API的两种方式

热门文章

  1. 代码能不能不要写得这么烂?!
  2. soapui自带的webservice实例 MockService
  3. symbian 中自动寻找cmwap连接点,通杀uiq 2nd 3nd和s60 2nd 3nd 5nd
  4. Java 8 新特性之Stream API
  5. Django2 Web 实战03-文件上传
  6. iOS底层原理探究-Runloop
  7. 1.4- 定时任务总结之九句箴言
  8. apache 虚拟主机详细配置:http.conf配置详解
  9. net-speeder
  10. 汉能:让人类像叶绿素一样利用太阳能