本章的题目有些抽象。实际上,本章是在讲述如何管理自主代码对第三方代码的调用——这些调用点就是“边界”。作者在本章讨论了如何处理调用点能够使得自主代码具有更好的可读性和扩展性以及更低的维护成本(当依赖和调用的第三方代码发生迭代变更时)。

建议1:“学习性测试”

含义

所谓学习性测试,就是说——当我们要引入一组第三方API时,我们对这些API的特性及用法还不够了解的情况下,应该为这些第三方API编写测试代码,测试他们在不同输入下的输出是否符合我们的预期。而这些测试代码不是用后即焚的一次性代码,相反,这些代码应该保留在系统中,作为测试代码的一部分。

优点

  • 学习性测试可以作为一种帮助我们了解和试用第三方API的途径,增进我们对第三方API的理解;
  • 学习性测试可以帮助我们观察第三方API的特性是否满足我们的需求;
  • 当第三方代码发生了变更(如版本演进)之后,保留下来的学习性测试代码可以帮助我们快速感知到新版本的第三方API的特性是否发生变化,从而帮助我们确定新版本的API会不会给我们的代码引入不确定因素。

    建议2:对第三方代码进行封装

    含义

    第三方代码是我们无法控制的,并且在未来他们可能会发生变化。为了使我们在这些时候尽可能少地去修改我们的代码,我们应当对第三方代码进行二次封装,根据我们自己的需要来暴露出封装后的操作API。这样,当第三方API发生变更时,我们只需要更新这些封装类,而不需要对其他的代码进行变更。
    另一方面,第三方API的开发人员和我们对于“调用边界”处的业务逻辑的理解、实现方案的设计可能会有一些差异,我们可以根据自己的需要预先设计对应了第三方API的接口,然后再使用适配器模式来将第三方的实现整合到我们的实现中,这样,就可以使得“调用边界”的暴露的操作接口更满足我们自身的需要。

    优点

  • 维护成本低;

  • 边界处代码可读性好,代码风格一致性高。