2012-02-29 37 views
1

目前我正在學習軟件設計的原則,特別是Acyclic Dependencies Principle(第18頁)如果一個類依賴於另一個包中的類,它是否依賴於該包中的所有其他類?

從已給我解釋它作爲例子:當包一個一類依賴於一類,包B,然後包A取決於包B中的所有類以及它們的依賴關係(可傳遞地)

我知道包A將依賴於包B.但是實際上並不依賴包B的所有類 - 我不太確定關於那個。我認爲它可以級聯的唯一方式就是在包B中依賴的類實際上依賴於包B中的某些類,然後依賴於其他包。

回答

4

包只是一個命名空間。軟件包的依賴關係不存在。你可以依賴於類,而這些類都在一個包中,但僅此而已。如果您依賴其中的一個包,則不依賴於所有包的類。

說一個類或包依賴於另一個包只是一個捷徑,說它至少取決於這個包的一個類。

+3

+1:但是打包(即,以jar包的形式提供)可能會導致類似於包級別依賴性的事情,這種情況更爲真實,並且週期可能很重要。 – 2012-02-29 20:13:25

+0

@Don Roby - 我從來沒有想過如何包裝。如果你在一個jar(包)中使用一個類,那麼它是否需要編譯該jar中包含的所有類? – 2012-02-29 20:58:58

2

就我所知,包A中的類(讓它稱爲ClassA)僅依賴於它使用的包B中的類(讓我們稱之爲ClassB)。

但是,如果ClassB依賴於ClassBee和ClassBuzz(也在包B中),那麼ClassA也將依賴於這些。

如果包(A)中的一個類依賴於另一個包(B)中的一個類,那麼A依賴於B,而不管您要使用的類(如ClassApe)是否使用任何類包B。

我希望這可以回答你的問題,不會過度混淆。

1

我認爲你的關於其他包中的內部依賴關係的最後一個條款是相當重要的,只要該包提供所需的最小可訪問性,仍然努力正常工作。所以,這個原理可能會告訴我們使用整個軟件包,而不是其中的一部分。

但是你不依賴更多的類然後你使用,所有的功能應該在下面的包發佈中與你訪問包的公共部分保持一致,但它不是你應該擔心的內部依賴關係,但包的作者。