0%

代码整洁之道 - 边界

使用第三方代码 Using Third-Party Code

在接口提供者和使用者之间存在与生俱来的矛盾

  1. 第三方程序包或框架提供者追求普适性,能在多种环境中工作,从而吸引广泛的用户

  2. 使用者想要得到集中满足特定需求的接口

因此,应该对第三方代码进行适当的封装

浏览和学习边界 Exploring and Learning Boundaries

传统学习使用的方法是:

  1. 花上 1 到 2 天阅读文档,决定如何使用

  2. 编写使用第三方代码的代码,看是否如我们所愿

  3. 陷入长时间的调试

新的做法(学习性测试 learning test):

  • 不要在生产代码中试验新东西,通过编写测试来遍览和理解第三方代码

  • 在学习性测试中,通过核对试验来检测对于API的理解程度,测试聚焦于我们想从 API 得到的东西

学习性测试的好处不只是免费 Learning Tests Are Better Than Free

  • 学习性测试无成本,不管怎样都得学会如何使用 API,学习性测试是一种精确试验,帮助我们增进对 API 的理解

  • 当第三方程序包发布了新版本,可以运行学习性测试,检查程序包的行为是否改变

使用尚不存在的代码 Using Code That Does Not Yet Exist

boundary

  • 编写自己的接口,它在我们的控制下

  • 图中,未来的 Transmitter API 完全从 CommunicationsController 类中隔离了出来

  • 我们可以通过 Adapter 设计模式让我们的接口和未知的接口兼容

整洁边界 Clean Boundaries

  • 依靠你能控制的东西,好过依靠你控制不了的东西,免得日后受它控制

  • 边界上的代码需要清晰的分隔和定义期望的测试,应避免我么代码过多了解第三方代码中的特定信息

  • 可以通过代码中少数几处引用第三方边界接口的位置来管理第三方边界

    • 封装到单独的类中

    • 使用 Adapter 模式将我们的接口转换为第三方提供的接口