下面是我們在德裕軟件已經從做這個QAM和QWeb教訓。
我們的方法是將此視爲使用框架或原型框架跨所有項目的重構工作。我們將每個項目中的框架代碼分離成單獨構建的東西,例如,src/myapp包含特定於應用程序的代碼,src/qam包含框架本身。每個項目都有自己的應用程序專用代碼副本,還有一個單獨的項目,其中只包含框架本身的最新版本。當我們說要在構架一個特定項目中確定的東西,我們:該項目推廣代碼中
- 重構(基於我們都該應用程序,並使用該框架的所有其他人的理解);
- 重構項目中的代碼從應用程序特定部分移動到框架部分;
- 將此更新應用於包含框架「主副本」的項目;
- 將來自該主副本的更改合併到其他也在使用框架的項目中;然後
- 在其他項目中重構使用框架的那部分而不是它們類似的特定於應用程序的代碼。
這需要相當數量的紀律來快速調整變化。如果您剛完成開發新功能並立即將其引入其他項目,則集成非常簡單。一段時間未更新的項目變得更難以使用最新版本的框架。如果您沒有迅速將更改帶入主副本,那麼最終可能會在兩個項目中的框架副本中產生不同的(並且更糟糕的是,相互衝突的)更改,並且合併可能會變得非常痛苦。在開始更改框架之前,您一定要將任何特定項目更新到最新版本的框架。
這樣做需要一定量的工具等實際支持。您需要一種方式輕鬆快速地在框架的各種副本之間來回移動更改。我們有一個自定義工具來執行此操作(qu
),但是我想可以使用修訂控制系統,特別是通過移動補丁工作的分佈式控制系統來幫助完成此操作。
對每個應用程序有一個全面的測試套件有很大幫助;我不確定我會不想嘗試這樣做。
爲了理智,保持變化很小是很重要的。再次,這都是合併和移動更新的難度。如果它總是很快,而且你最近一直在做的事情,那麼事情很簡單。這些變化是巨大的,而且自從你在這個框架中工作以來就變得越久,變得越困難。
我應該澄清一點,我不會爲除我自己以外的任何人做這件事。我正在爲不同的行業開發類似的應用程序,所以核心是90%相同,差異在於細節。 – 2009-05-18 01:39:50