真正的单一代码库公司并不存在
内容提要
文章讨论了“单一代码库”(monorepo)与“多代码库”(polyrepo)之间的辩论。作者认为,真正的单一代码库公司并不存在,所有公司实际上都是多代码库公司。尽管一些大公司声称使用单一代码库以提高开发效率,但他们实际上是在多个大型代码库中组织代码。文章建议将“单一代码库”重新命名为“多服务”或“多项目”代码库,以更准确地反映其本质。
延伸解读
命名误导:单一代码库实为多项目代码库
文章指出,“单一代码库”这一名称容易让人误解为整个公司只有一个代码库。实际上,像Meta、Google等公司是在多个大型代码库中组织代码,每个代码库包含多个项目或服务。因此,作者建议将其重命名为“多服务”或“多项目”代码库,以更准确地反映其本质。
跨库共享代码的依赖挑战
即使公司采用多个大型代码库,不同代码库之间仍需要共享代码,例如类型定义。文章以Meta的Facebook和Instagram为例,说明当两个代码库需要共享类型或库时,就会引入典型的依赖管理问题。这种跨库依赖的复杂性会随着共享范围的扩大而增加。
权衡:构建工具与依赖协调
文章对比了两种代码组织方式的利弊:大型多项目代码库需要大量的构建和CI/CD工具支持,而较小的孤立代码库则面临依赖管理和协调的难题。这些权衡与代码库的数量无关,而是取决于组织代码的策略。
关注点分离才是核心
文章认为,单一代码库与多代码库的辩论本质上是关于关注点分离:单一代码库在一个仓库中处理多个关注点,而多代码库确保每个仓库只处理一个孤立的关注点。因此,比代码库数量更重要的是如何跨多个仓库组织代码,以更好地服务团队。
Q&A
什么是单一代码库和多代码库的区别?
单一代码库处理多个关注点,而多代码库确保每个代码库只处理一个孤立的关注点。
为什么作者认为真正的单一代码库公司并不存在?
作者认为所有公司实际上都是多代码库公司,即使声称使用单一代码库的大公司也在多个大型代码库中组织代码。
单一代码库的概念是如何被大公司普及的?
大公司如Facebook、Google和Uber声称单一代码库对快速开发至关重要,但实际上他们在多个大型代码库中战略性地组织代码。
使用单一代码库的公司面临哪些挑战?
大型多项目代码库需要大量的构建和CI/CD工具,而较小的孤立代码库则面临依赖管理和协调的问题。
作者建议如何重新命名单一代码库?
作者建议将“单一代码库”重新命名为“多服务”或“多项目”代码库,以更准确地反映其本质。
单一代码库和多代码库的组织策略有什么不同?
单一代码库的组织策略是将多个关注点放在一个库中,而多代码库则是将每个库专注于一个孤立的关注点。