2015-04-14 29 views
3

我正在閱讀Android : Clean Architecture的源代碼,主要是爲了學習如何正確地組織一個應用程序進入圖層,以及MVP模式,並將其與我一直在閱讀的MVP here相匹配。Android中的多項目構建的好處是什麼?

然而,隨着漂亮,我覺得結構,我真的不明白的順序利益一個應用程序分成多個子項目模塊。考慮到他們(數據,演示文稿,域)相互依賴,並最終將成爲同一個可執行文件的一部分,它看起來更像配置地獄。

dependencies { 
    ... 
    compile project(':domain') 
    compile project(':data') 

什麼是compartmentalizing的Android應用程序分成多個子項目(模塊),而不是讓他們在一個項目,但他們通過僅僅是分開的好處是什麼?

+1

它更多的是幫助您定義架構中層(圈)之間的界限。如果你嘗試向某個沒有正確依賴關係的模塊添加某些東西,它會阻止你這樣做,因此你將遵循體系結構 – Blundell

回答

3

實際上,這個問題不是Android特有的,但更多的軟件架構相關,因爲它幾乎適用於您開發的任何軟件(例如,爲什麼任何應用程序由幾個模塊組成,而不是全部集成在一個軟件包中)。

拆分代碼爲模塊將提供您至少有以下好處(這是我腦海中第一個3):

  1. 模塊之間清除隔離。 MVP模式的整個目標是確保您的業務邏輯和演示層不緊密耦合在一起。通過在不同模塊中定義這些模式,可以使這種分離更加清晰,並鼓勵您堅持這種模式。
  2. 代碼重用 - 考慮一種情況,您可以爲一些客戶銷售一個應用程序,但每個客戶都希望獲得不同的外觀和感覺。如果你將所有的代碼放在一個整體項目中,那麼你必須爲你的項目分配許多分支,爲每個客戶分配一個代碼,或者使用自定義選項膨脹提供的應用程序代碼。現在,如果另一方面你已經分開你的模塊,那麼你可以爲每個客戶準備一個不同的表示層,並將其與其他公共模塊捆綁在一起。
  3. 將項目拆分爲子項目允許更高效的構建和測試,因爲只要其中一個文件發生更改,就可以重建和測試僅更改的模塊,而不是重新編譯整個項目。

我希望這對你有意義。

+0

1和2是的,3 ..與gradle不太一樣,有時候多模塊方法實際上減慢了構建速度[我的意見 - 懶惰地參考] – Blundell

+0

然而,您可以選擇僅構建特定模塊(例如'gradlew -p submodule')而不是整個項目。另外,在#2中描述的情況下,您將爲所有發行版僅編譯一次通用代碼,而不是重新編譯每個應用程序風格的整個代碼庫。 –

1

使用多模塊項目而不僅僅是包的主要好處是,模塊之間的代碼使用率僅在一個方向上。

任何代碼內部模塊可以具有背面的往復關係:

A - >使用類從 - >乙

乙 - >用途從 - > A

如果A和B在單獨模塊,這隻能單向:

A - >(使用類的) - >乙: ...

但B無法看到任何東西A.

這種分裂把你的想法變成更小的,一口大小的塊。如果您需要了解模塊B中的課程是如何工作的,則只需查看B中的其他課程。 但在第一種情況下,您必須查看A和B中的所有課程。

作爲額外的好處,如果您確實想要重複使用任何代碼,您可以將該模塊複製到下一個項目。

我通常把我的代碼的大部分放在模塊中,用一個薄的應用程序層將它們連接在一起。我建議使用依賴關係反轉來在模塊之間建立任何連接。

0

除了構建時間更快以外,另一個Android拆分爲模塊的特定優勢是應用的更新大小會更小。

相關問題