當一個很大包的程式(之後稱”母體”),逐漸變成一個怪物時,會有很多人抱怨寫的太亂,寫得太難看懂。或是你的專案賺錢後,請了越來越多的人,發現到一直在重覆處理相同的問題。這時候要進行分解的動作,好讓你下面的人可以繼續專業分工。但是怎麼分解才不會影響到程式的穩定,與保持版本追蹤。我有一套流程。我分為幾個面向:
I. Source Code
為新模組寫一個新的makefile。makefile裡面重新加上要編在library裡面相關的.o與.a。
當然make以後會發現到有很多未定義的symbol。因為已經從母體分出,當然會有很多與母體連結的symbol。現在要將之拆散,勢必要重新實作出這些東西。所以事先規畫非常重要,你要先找出一個耦合度最低的部分來分解。
這些東西要實作在哪邊呢。我是新增一個.c檔,通常稱作xxx_Interface.c,將所有未定義的symbol,先定在這個.c中,使library通過編譯,讓自己對這library有個概觀,也形成一個骨架。未來再回來把內容補滿 。
II. Git版本操作
A. git branch xxxlibrary,加上#define的同時,也加上一個branch。從這個branch加入library。
B. 如要移動檔案,先改make裡面的路徑,而不要先移動檔案。因為移動了檔案,檔案如果需要修改,將來變得很難比對。先改makefile裡的檔案路徑,完成commit之後,再進行移動檔案。
C. 改完後commit。
III. Release
當library建立完成後,跟主線merge,並且在母體的Makefile裡面加上類似-Dxxxlib的定義。好讓source code裡面能選擇要不要link到新的library。這樣子就能夠在git中,追蹤新library以及原本未切出的部分了。
沒有留言:
張貼留言