1.3.3 并行开发
即使你只是编写内部软件,与你共事的工程师也很可能要使用你的代码编写程序。如果使用良好的API设计技巧,就可以简化彼此的工作,不必回答诸多关于代码如何工作、如何使用的问题。这在多个开发者并行开发相互依赖的代码时显得尤为重要。
举例来说,假设你正在编写一个字符串加密算法,其他开发者需要使用该算法将数据写入配置文件。一种做法是让其他开发者等你完成所有工作,然后在其文件输出模块中使用你的算法。然而,更有效率的做法是,你们提前见面协商好恰当的API,然后你把API放在适当的位置,而API仅仅起占位符的作用,这样你的同事就可以立即调用它们了,例如:

接着,你可以提供这些函数的简单实现,使得该模块至少可以编译和链接。例如,相关的.cpp文件可以像下面这样:

这样一来,你的同事就能够使用这个API继续工作而不被你的进度所耽搁。虽然目前你的API实际上不会加密任何字符串,但这只是一个小的实现细节。重要的是已经有了一个双方都认可的稳定接口,即一个契约,而且该接口的行为恰当,例如Decrypt(Encrypt("Hello"))将会返回"Hello"。当你完成了工作,并以正确的实现更新了.cpp文件后,你同事的那部分代码不需要进行任何修改就能直接运行了。
实际上,有些接口问题很可能在编写代码之前并没有预料到,因此API设计可能需要多次迭代才能保证其恰到好处。在大多数情况下,API支持双方能够以最少的停顿并行工作。
这种方法还有利于测试驱动或者是测试先行的开发。事先确定了API,就可以编写单元测试来验证预期的功能,并且可以持续运行这些测试程序,以保证始终没有打破你和同事之间的契约。
将该过程延伸到组织层面,你的项目可以有独立的团队,他们彼此也许相距很远,甚至遵循不同的日程安排。通过预先确定各个团队的依赖关系,并通过创建API来为这些关系建模,各个团队就可以独立工作,而几乎不必关心其他团队如何实现API的工作。资源的有效利用以及削减相应的冗余通信,能够为组织节约大量整体成本。