2010-04-04 13 views
5

我們的團隊正在進入規模更大的項目,其中許多都使用內他們幾個開源項目。建議保持大型C++項目模塊化?

任何建議或最佳做法,以保持庫和依賴關係比較模塊化,易於升級當他們新版本都出來了?

換一種方式,可以說你做一個程序,它是一個開源項目的一個分支。隨着這兩個項目的增長,維護和共享內核更新的最簡單方法是什麼?

諮詢關於什麼,我只要求請...我不需要「好,你應該這樣做,而不是」或「你爲什麼」 ..謝謝。

+0

一家公司我是在結束了持續數年的不支持舊版本的Bugzilla,因爲它無法與上游的變化乾淨地把相對小的變化。沒有人有時間把它整理出來。當然,如果我們需要上游的變化,我們會發現時間,但故事的寓意是,如果你分叉,那麼你最終會遇到一個「不容易升級」的案例。不要試圖避免這種情況發生,而是儘量減少發生的頻率。 – 2010-04-04 23:10:10

+0

IMO屬於Programmars.SE,但由於它太舊而不允許遷移,我只是投票結束。 – o11c 2015-06-29 04:08:59

回答

6

隨着開源的克隆突出你最大頭痛中的一個將在同步被保持/根據上游源修補。您可能不在乎新功能,但您肯定需要應用重要的錯誤修復。

我的建議是,要仔細包裹等在內的項目到共享庫中,因此,如果ABI不被打破的變化,你可以或多或少的無痛升級只是那些部分。

一兩件事 - 如果你發現在一個開源項目,修正錯誤 - 不要的修復保留給自己。上游推送補丁。這將使項目更好,併爲您節省與新版本合併的日子。

+0

包裝+1 - 好主意自己包裝所有的依賴關係。 – AshleysBrain 2010-04-04 23:12:00

+0

偉大的建議!謝謝! – Jay 2010-04-05 01:11:41

+0

+1建議推回補丁:即使您不想分享,也可以考慮在之後的補丁中獲得社區支持,所以沒有理由不這樣做。 – 2010-04-05 12:04:16

4

按優先順序排列

  1. 請對第三方庫的一些變化成爲可能。嘗試解決代碼中的侷限性。記錄您的更改,然後提交補丁。
  2. 如果無法避開其侷限性,提交你的變化是一個補丁(這可能是理想主義與一些項目的冰川步伐)。
  3. 如果你不能做任何的那些東西,你記錄在一個集中的位置已經改變了什麼,這樣的窮人做新版本的整合可以找出你正在做的挫折感,如果所做的更改仍然需要。

1和2非常受歡迎(但分別爲快速和非常慢),而第三種選擇只會導致頭痛和錯誤,因爲您的代碼庫偏離了依賴關係的代碼庫。在我的代碼中,除非必須仔細閱讀頭文件,否則我甚至沒有將第三方代碼加載到IDE中。這消除了改變不屬於我的東西的誘惑。

至於模塊化,這是假設你使用相對穩定的第三方庫,只有程序面向公衆的接口。僅僅因爲你有源代碼並不意味着你必須在代碼中使用它。這應該允許更新實質上是拖放。現在,這完全是理想主義的,但它是我努力使用的代碼所追求的。

+0

感謝您的諮詢! – Jay 2010-04-05 01:12:03