大厂的 SDK 写法,偷学到了( 三 )

还可以让用户自己来控制解析的方式:
// 自定义解析器interface MyParser extends Parser {// 需要用户自己实现void doParse();}// 指定解析器date = DateUtils.parse('2021-01-18', MyParser.class);这两种方式在 SDK 的设计中屡见不鲜 , 此外还可以让用户自行编写或指定配置文件 , 也能提高灵活性 。
高效稳定其实 , 开发 SDK , 尤其是在大厂开发 SDK , 是个很 “坑” 的工作 , 我相信做过的朋友会感同身受 。
因为随着使用你 SDK 的用户越来越多 , 可能会发现各种各样莫名其妙的问题;而且 SDK 作为相对底层的依赖 , 对使用方的影响也是无法估量的 。所以 , 不想经常加班改 Bug 的话 , 就要保证你 SDK 的稳定性 。
我们需要注意以下几点:
1. 测试为了保证每个功能都是正常的 , 我们可以编写 单元测试(UT)来最大程度上地覆盖 SDK 的功能和代码 。
尤其是每次改动代码后、发布新版本之前 , 都要再完整地执行一遍测试 , 不要盲目自信 。

大厂的 SDK 写法,偷学到了

文章插图
 
接口测试报告
此外 , 还可以通过 压力测试 来估算 SDK 的执行效率 , 比如每秒最多同时执行 3 次、每次要执行 500 毫秒等 。建议将这些信息补充到说明文档中 , 给用户一些预期 。当然也可以尝试通过压测来优化 SDK 的性能 。
2. 兼容性重要的函数和接口尽量减少改动 , 尤其是函数名、入参和返回值!
举个例子 , SDK 0.1 版本时 , 函数的定义是这样的:
boolean isValid(String str)结果突然在 0.2 版本时改成了:
String checkValid(StringBuilder str)这样就会导致用户升级时一脸懵逼 , 怎么报了一堆找不到函数呢?
因此 , 对于比较大的改动 , 可以新写一个函数 , 并且给老函数打上类似 @Deprecated 的注释 , 表示已过时 , 引导用户去用新的 。
此外 , 还可以在 版本号 上做做文章 , 小改动时只改变小版本号 , 比如 0.0.1 到 0.0.2;大改动时才改变大版本号 , 比如 1.0 到 2.0 。这样可以给用户一个预期:这次改动很大 , 可能会存在不兼容 。
3. 暴露异常要让用户感知到 SDK 代码中可能抛出的异常 , 交给他们去进行相应的处理 , 防止出现一些意料之外的错误 。
此外 , SDK 要合理地打印日志 , 尤其是异常日志 , 在出了问题时要让调用者知道是出了什么问题 , 便于排查 。


推荐阅读