说个简单的例子吧,Office 要求所有修改(不论是 bugfix 还是新功能)都要加 Gate(除非你写比如太底层的库加不了……),就是一个可以转换到 bool 的类,用来控制你新写的代码是否开启。对 Bugfix 是默认开启,对新功能是默认关闭。
然后如果你打开实现了 Gate 的那个库你可以发现这个库非常大而且还有十几个依赖,为什么呢?
- 开启那些 Gate 需要读配置文件吧——于是对文件 IO 有依赖
- 新功能的 rollout 是服务端控制的——因此要依赖网络库
- 需要检测新功能是否会导致 Crash 吧——于是你需要和 Telemetry 相关的一堆库
- 写单元测试的时候需要能用代码手工开启/关闭 Gate 吧——于是有 Override 的一堆相关功能
- Office 是企业软件,企业主需要可以控制新功能的 roolout——于是和企业管理的一堆东西都得有
- Office 的内部版本在设置界面有一个单独的 Tab 去允许开发人员手工开启/关闭 Gate——于是这个库就需要依赖 License 相关的功能去检测是否是 Development License,还有提供给 UI 系统的接口
- 还有更多……
这么一看,软件自然就大了 |