モジュールは、文脈に応じていくつかを意味することができます。通常、このような用語は非常に曖昧です。 Java/Kotlinでは、クラスまたはパッケージのいずれかになります。 Androidの点では、アプリケーションの概念的に(または機能的に)独立したコンポーネントの1つにすることができます。さらに、これらのコンポーネントは、通常が別々のファイル(クラス)とパッケージに存在するため、意味の重複があります。
のはあなたの例を見てみましょう:
- サインインして
- メッセージを送信します。
- ログアウト。
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のガイドをお勧めしますMVCについてどう
更新
https://developer.android.com/topic/libraries/architecture/guide.html
?
AndroidはModel-View-Presenterと呼ばれるMVCの派生を使用します。 MVPでは、プレゼンターは、「ミドルマン」(詳細here)の機能を前提としています。例を使用しましょう:https://github.com/googlesamples/android-architecture/tree/todo-mvp。このGoogleのシンプルなToDoアプリは、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%のアプリケーションでは、1つのモジュールだけで十分で、複数のモジュールがもたらすオーバーヘッドに苦しむことはありません。他のコードを整理する場合は、[これはインスピレーションのための素晴らしい記事です](https://overflow.buffer.com/2016/09/26/android-rethinking-package-structure/) - 一般的に、 (つまり、ログインにはパッケージがあり、メッセージングにはパッケージがあります)、コードベースをもっと簡単にナビゲートすることができます。 –
したがって、単一のパッケージのクラスだけでこれができますか?または別のパッケージ?私が問題にしている機能はちょうどよい例です。どこにパッケージが必要でしょうか。 – blackHawk
ユニットテストはどうでしょうか?簡単に単体テストできるように、どうすればわかりますか? – blackHawk