模塊可能意味着一些事情,具體取決於上下文。通常,這樣的術語非常模糊。在Java/Kotlin中,它可以是類或包。就Android而言,它可以是您的應用程序的一個概念上(或功能上)獨立的組件。此外,這些組件通常將駐留在單獨的文件(類)和包中,因此存在語義重疊。
讓我們把你的例子:
- 登錄
- 發送消息。
- 退出。
在Android上,你可以像這樣它型號:
app
˪ ui
˪ SplashActivity
˪ SignInFragment
˪ SignUpFragment
˪ data
˪ db
˪ DatabaseManager
˪ models
[model classes]
˪ api
[classes responsible for network communication]
這裏有:
ui
- 負責UI模塊/組件(並在同一時間包)邏輯。
SplashActivity
- 負責管理有關登錄/註冊的邏輯。從概念上講,我們也可以將其稱爲模塊。物理上是一個類/文件。
data
- 大模塊/組件僅負責數據操作。同樣,在物理上同時也是一個包裝。
db
- 專門負責數據庫邏輯的子模塊。
依此類推。我試圖推動的一點是:模塊通常會作爲抽象更多。
關於單元測試。模塊化設計將始終使應用更具可測性。在上面的例子中,所有的UI邏輯都與數據邏輯分開,因此所有的數據都可以很容易地被模擬。 Activity
不關心從哪裏拉數據所有細節都隱藏在合適的界面後面。 這有點寬泛的問題,所以我建議你Android的指導,應用架構,這正是約模塊化設計:https://developer.android.com/topic/libraries/architecture/guide.html
更新
什麼MVC?
Android使用派生的MVC,稱爲Model-View-Presenter。在MVP中,發言人假定「中間人」的功能(詳細信息here)。我們用一個例子:https://github.com/googlesamples/android-architecture/tree/todo-mvp。這款Google簡單的應用程序說明了MVP設計。它的組織如下:
todoapp
˪ data
˪ source
˪ Task.java (model)
[...]
˪ tasks
˪ TasksActivity.java
˪ TasksFragment.java
˪ TasksPresenter.java
[...]
正如你所看到的,這個佈局與我之前介紹的非常相似。數據(模型)邏輯保存在單獨的包和UI邏輯中(View,Presenter)。當然,您可以將Presenter從View中分離出來,不過,這是一個非常簡單的應用程序,並且類分離就足夠了。
如果你在組件之間有乾淨的分離,就像在MVP中那樣,可以很容易地獨立地對它們進行測試 - 只需模擬其他組件。再次,我推薦閱讀: https://developer.android.com/topic/libraries/architecture/guide.html,有關於如何測試每個組件的整個部分。
如果您絕對需要,只將您的項目拆分爲模塊。對於像Facebook這樣的巨型應用程序來說,它可能是有意義的,但對於95%的應用程序而言,單個模塊就沒問題,並且不會承受多個模塊帶來的開銷。至於組織你的其他代碼,[這是一個偉大的文章](https://overflow.buffer.com/2016/09/26/android-rethinking-package-structure/) - 一般來說,包裝由功能而不是層(即登錄將有一個包,消息傳遞將有一個包)將導致您的代碼庫更容易導航。 –
那麼只有單個包裝中的課程可以做到這一點?或單獨的軟件包?我描述的功能僅僅是一個例子,我們將在哪裏需要包 – blackHawk
單元測試怎麼樣,我們如何可以將我們的代碼組織起來,以便它可以輕鬆地進行單元測試? – blackHawk