符号隐藏与依赖管理是软件工程中关乎效率的关键能力。它的核心是“每个软件模块如何在隐藏好自己的同时,还能低成本的精准获取依赖”
。做好了这件事,每个软件模块的变化传播范围可以控制到最小,又能恰如其分的和外部依赖进行协同。这样软件模块不仅容易做到独立的开发、构建、测试与发布,最后又能协同起来完成整体的业务目标。
正如前一篇中所说,做好符号隐藏和依赖管理,需要基于软件团队的设计规划能力、工程工具能力以及团队纪律。虽然这几点在文章中都有涉及,但是这次还是更多的侧重于工程工具方面。而设计方面希望未来可以通过别的文章再来展开。
在撰写这些文章的过程中,一直想用一些做得好的优秀代码库作为示例,所以又翻看了很多优秀的C和C++开源库。
其中C语言的有:
- cJSON: https://github.com/DaveGamble/cJSON
- jemalloc: https://github.com/jemalloc/jemalloc
- libuv: https://github.com/libuv/libuv
- redis: https://github.com/antirez/redis
- sqlite: https://repo.or.cz/sqlite.git
C++的有:
- CAF: https://github.com/actor-framework/actor-framework
- cpp-react: https://github.com/schlangster/cpp.react
- folly: https://github.com/facebook/folly
- muduo: https://github.com/chenshuo/muduo
上述这些都是非常值得学习的经典代码库。最后这篇文章本来想挑选其中对符号隐藏和依赖管理做得好的库给大家剖析下的,但是在写这系列文章的过程中,不幸通风引起脚踝发炎,痛苦不堪,所以文章就先缩水了。
其中推荐大家有精力的话可以看看著名的libuv。libuv是一个跨平台的异步IO库,被用在著名的nodejs里作为事件驱动的引擎。它综合使用了我们前面说到的各种实践:从目录布局,到库的API符号隐藏,到构建设计,当然它的源码设计也是很不错的。
最后,祝大家2020年一切顺利!
网友评论