符號隱藏與依賴管理是軟件工程中關乎效率的關鍵能力。它的核心是“每個軟件模塊如何在隱藏好自己的同時,還能低成本的精準獲取依賴”
。做好了這件事,每個軟件模塊的變化傳播范圍可以控制到最小,又能恰如其分的和外部依賴進行協同。這樣軟件模塊不僅容易做到獨立的開發、構建、測試與發布,最后又能協同起來完成整體的業務目標。
正如前一篇中所說,做好符號隱藏和依賴管理,需要基于軟件團隊的設計規劃能力、工程工具能力以及團隊紀律。雖然這幾點在文章中都有涉及,但是這次還是更多的側重于工程工具方面。而設計方面希望未來可以通過別的文章再來展開。
在撰寫這些文章的過程中,一直想用一些做得好的優秀代碼庫作為示例,所以又翻看了很多優秀的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年一切順利!