2012-01-30 29 views
3

我在問這個關於在Linux上開發的C++項目。考慮這個:在C++中,爲什麼週期性目錄依賴性不好?

我有兩個對等目錄,dir1dir2。包含classA.hclassB.h。包含classC.hclassD.hdir1/classA.h對於dir2/classC.h#includedir2/classD.h對於dir1/classB.h#include。因此,目錄dir1dir2之間存在週期性依賴關係。但是,在任何類之間不存在循環依賴關係。

我明白爲什麼類之間的循環依賴關係不好。我覺得目錄應該也沒有周期性的依賴關係,但我無法弄清楚爲什麼這樣做會很糟糕。

任何人都有一個解釋?

+0

是否有任何間接循環,像'classC.h'包括'classD.h'什麼的? – 2012-01-30 10:19:10

+0

.h文件之間沒有間接循環。 – KenK 2012-01-30 10:34:50

回答

5

他們並不差。至少不是你說出問題的方式。目錄是爲了組織文件,但編程沒有意義。

然而假如你的目錄代表了不同的模塊(即沒有爲每個目錄生成庫文件),你將有鏈接錯誤。

因爲classA依賴於classC,所以需要編譯第二個模塊才能編譯第一個模塊。但第二個模塊需要首先構建第一個模塊,因爲classD取決於classB

0

喜歡的目錄類循環依賴可以爲可維護性重用的問題。

可維護性:當「模塊」(在本例中爲目錄)依賴於另一個模塊時,無論何時其他模塊發生更改,該更改都會影響此模塊。
重用:重用模塊時,還必須重用它依賴的模塊。

因此,對於循環依賴關係,所有模塊都會受到影響。這對於有限數量的模塊並不是一個真正的問題,但它隨着數量的增長而增長。

+0

在討論文件和庫時,這對我來說很有意義 - 但我沒有得到目錄。你可以擴大一點,或者提供一個例子,當循環僅在目錄級時,這會導致問題。謝謝。 – KenK 2012-01-30 10:39:11

+0

將文件放入目錄是一種組織方式,因此重用完整目錄作爲一種模塊應該是有意義的。循環依賴性可以最大限度地減少重用的機會。爲了可維護性,如果依賴關係不是循環的,我們可以預測哪些目錄會受到影響,並具有(很多)循環依賴關係,每個更改都會影響整個系統。 – stefaanv 2012-01-30 10:54:28