Android 應用程式模組化指南

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

含有多個 Gradle 模組的專案稱為多模組專案。本指南包含開發多模組 Android 應用程式的最佳做法和建議模式。

日益增加的程式碼集問題

日新月異的程式碼集、擴充性、可讀性和整體程式碼品質往往會隨著時間逐漸降低。這是因為程式碼集的規模增加,但沒有維護人員採取主動措施來強制執行易於維護的結構。模組化是一種建構程式碼集的方式,可改善維護性並避免這些問題。

什麼是模組化?

模組化是將程式碼集整理成鬆耦合和獨立元件的做法。每個部分都是一個模組。每個模組都是獨立的,具有明確的用途。將問題分成幾個小而易於解決的子問題,就能降低設計和維護大型系統的複雜度。

圖 1:多模組程式碼集範例中的依附元件圖表

模組化的優點

模組化的優點有很多,但主要在於改善程式碼集的可維護性和整體品質。下表摘要說明主要優點。

優點 摘要
重複使用性 模組化可讓您共用程式碼,並透過同一個基礎建構多個應用程式。模組可以有效建構區塊。應用程式必須為其功能的總和,這些功能會整理成獨立的模組。特定模組提供的功能不一定要在特定應用程式中啟用。舉例來說,:feature:news 可以是完整變種版本和 Wear 應用程式的一部分,但不能加入試用變種版本。
嚴格控制瀏覽權限 模組可讓您輕鬆控管對程式碼集其他部分公開的內容。您可以將公開介面以外的所有內容標示為 internalprivate,以避免在模組外使用。
可自訂提供 Play Feature Delivery 會使用應用程式套件的進階功能,以便按條件提供或視情況提供應用程式的特定功能。

上述優點只能透過模組化程式碼集實現。使用其他技巧或許能享有下列優點,但模組化功能可協助您進一步強制執行這些技巧。

優點 摘要
擴充性 在緊耦合的程式碼集中,單次變更可能會在看似不相關的程式碼部分觸發大量修改。經過適當模組化的專案可運用關注點分離原則,並限制耦合。這個做法可讓貢獻者以更精細的自主方式解決問題。
擁有權 除了啟用自主功能之外,模組也可以用於強制執行責任。模組中可能包含一位專屬的擁有者,負責維護程式碼、修正錯誤、新增測試及審查變更。
封裝 「封裝」是指程式碼的各個部分,盡可能減少對其他部分的知識。隔離的程式碼更容易閱讀及理解。
可測試性。 可測試性特性可方便您測試程式碼。可測試的程式碼可讓您輕鬆測試獨立元件。
建構時間 部分 Gradle 功能 (例如漸進式建構、建構快取或平行建構) 可以利用模組性提升建構效能

常見陷阱

程式碼集的精細程度是指模組的組成程度。越精細的程式碼集有越小的模組。設計模組化程式碼集時,建議您決定精細程度。因此,請將程式碼集的大小及其相對複雜度納入考量。加以細分會導致負載負擔加重,而粗略化會降低模組化的優勢。

一些常見缺點如下:

  • 過於精細:每個模組在建構複雜度和樣板程式碼方面,其負擔量都會有一定增加。複雜的建構設定會使不同模組很難保持設定一致。樣板程式碼過多會導致程式碼集繁瑣,且難以維護。如果負擔抵消了擴充性改善,請考慮合併部分模組。
  • 過於粗略:反之,如果模組過大,最後可能會產生額外的單體,並失去模組化的好處。舉例來說,在小型專案中,您可以將資料層放入單一模組。但隨著規模不斷增加,可能需要將存放區和資料來源分割為獨立的模組。
  • 太過複雜:將專案進行模組化並不一定有意義。主要因素是程式碼集的大小。如果您預計專案數量不會超過特定閾值,系統就不會套用擴充性與建構時間增長。

模組化是適用於我的技術嗎?

如果您需要可重用性、嚴格控制瀏覽權限或使用 Play Feature Delivery 為您帶來優勢,那麼您就需要使用模組化。如果您只是想改善擴充性、擁有權、封裝或建構時間,那麼不妨試一試模組化。

範例