Litong's Blog

Work to become, not to acquire.

第8章 边界

我们很少控制系统中的全部软件。

在接口提供者和使用者之间,存在与生俱来的张力。

第三方程序包和框架提供者追求普适性,而使用者则想要集中满足特定需求的接口。
这种张力会导致系统边界上出现问题。

边界上的接口是隐藏的,它能随来自应用程序其他部分的极小的影响而变动。

我们简易不要将Map(或在边界上的其他接口)在系统中传递。避免从公共API中返回边界接口,或将边界接口作为参数传递给公共API。

我们没有测试第三方代码的职责,但为要使用的第三方代码编写测试,可能最符合我们的利益。

学习第三方代码很难。整合第三方代码也很难。同时做着两件事难上加难。

不要再生产代码中试验新东西,而是编写测试来遍览和理解第三方代码。这叫做学习性测试(leaning tests)。

我们基本上是在通过核对试验来检测自己对那个API的理解程度。
测试聚焦于我们想从API得到的东西。

学习性测试毫无成本。

无论如何我们都得学习要使用的API,而编写测试则是获得这些知识的容易而不会影响其他工作的途径。
学习性测试是一种精确试验,帮助我们增进对API的理解。

当第三方程序包发布了新版本,我们可以运行学习性测试,看看程序包的行为有没有改变。

学习性测试确保第三方程序包按照我们想要的方式工作。

总要有一系列与生产代码中调用方式一致的输出测试来支持整洁的边界。

还有另一种边界,那种将已知和未知分隔开的边界。

在代码中总有许多地方是我们的知识未及之处,至少目前未知,边界的那边就是未知的。

边界上会发生有趣的事。改动是其中之一。

有良好的软件设计,无需巨大投入和重写即可进行修改。

边界上的代码需要清晰的分隔和定义了期望的测试。

应该避免我们的代码过多地了解第三方代码中的特定信息。
依靠你能控制的东西,好过依靠你控制不了的东西。