内容提要
共享代码的误区在于,内部库可能导致团队间的耦合,降低工程效率。虽然共享库在某些情况下有价值,但通常会增加维护负担,模糊责任界限。成功的共享库应小而专注,具备良好的管理和文档支持,以确保持续开发和使用。
延伸解读
共享库的隐性成本:耦合与维护负担
文章指出,共享库会通过依赖关系在团队间引入耦合,导致应用被间接绑定到特定版本,引发兼容性问题。同时,共享库的维护需要持续投入,但往往缺乏明确需求,设计测试困难,且容易随时间腐化。许多组织都有被遗忘的共享库,仅更新依赖就颇具挑战,更不用说功能演进。
何时共享库有价值:小而专注与设计系统
共享库并非总是反模式。文章举例,前端设计系统通过共享库统一外观和体验,是合理的应用。成功的共享库通常小而专注,有明确边界,并具备良好代码基础设施、测试套件、构建发布自动化和清晰文档。相反,名称含“common”“utility”的通用库容易变成杂物堆,重新实现语言特性或已解决问题,增加学习曲线。
警惕“最佳实践”库与领域共享库
文章批评了“最佳实践”库,认为其常是一组工程师将实现强加于其他团队,暗示不信任,损害工程文化。越具侵入性和主观性的库越无用。共享领域数据和逻辑的库则会模糊服务边界,通过共享模式造成耦合,修改时难以预测影响。更好的做法是复制领域数据、实现为独立服务或重新思考服务边界。
共享库的生命周期与治理
共享库难以编写且更难维护。开发可复用代码需要特定技能和设计模式知识,以把握抽象层次。组织常难抽调资源维护,导致库被遗忘或依赖少数热心工程师。内部开源方法可能有助于社区驱动,但前提是有大量熟悉开源社区的工程师,且仍需明确投入工程努力。共享库需要明确领导和治理,协作方式比自上而下强制更易持久。
Q&A
为什么共享代码可能导致团队间的耦合?
共享代码可能导致团队间的耦合,因为应用程序可能会间接依赖特定版本的共享库,从而引发兼容性问题,降低工程效率。
成功的共享库应该具备哪些特征?
成功的共享库应小而专注,具备良好的管理和文档支持,确保持续开发和使用。
共享库的维护有哪些挑战?
共享库的维护挑战包括缺乏明确的需求、设计和测试困难,以及随着时间推移的代码熵增问题。
内部共享库在什么情况下可能有价值?
内部共享库在实现设计系统、确保应用程序一致性时可能有价值,尤其是在前端开发中。
如何避免共享库成为反模式?
避免共享库成为反模式的方法包括明确领导和治理,确保库的目标清晰,并保持代码基础设施的良好管理。
共享库的生命周期管理为何困难?
共享库的生命周期管理困难在于它们容易被遗忘或失去维护,且需要持续的工程资源投入来保持更新和功能演进。