
MVCは、Androidのクリーンなアプローチであり、コントローラーからビューを遠ざけています。コントローラーはモデルの更新のみを担当します。モデルが更新されると、ビューに通知でき、適切なコールバックを使用してビューを更新できます。従来のMVCはあります
モデル:データのモデルとして機能します
ビュー:UIになることができるユーザーのビューを扱います
コントローラー:モデルとビューの間の相互作用を制御します。ビューでは、モデルを更新するためにコントローラーを呼び出します。ビューは、必要に応じて複数のコントローラーを呼び出すことができます。
MVPアプローチを使用して、MVCのいくつかの欠点を克服できます。 MVPのプレゼンターにはすべてのビジネスロジックが含まれており、このクラスはAndroidコンテキストまたはAndroid関連の依存関係から遠く離れており、テストモジュールでプレゼンタークラスを使用するだけでビジネスロジックに柔軟性を提供します。 Android関連の依存関係は、テストに複雑さを生み出します。プレゼンターには、コンテキスト、ビューなどのAndroid依存関係がありません。すべてのモデルの更新とネットワークリクエストは、プレゼンターを介して行われます。モデルが更新されるか、ネットワークリクエストが完了すると、[コールバックを使用してプレゼンターを使用してプレゼンターを使用してプレゼンターを使用してビューが更新されます。モデルとネットワークの要求は、ビューに直接アプローチすることはできません。
MVVMには、コードを短くし、Javaクラスのビュー処理コードを削減するためのデータバインディングアプローチが含まれます。ビューモデルはビューを更新する責任があり、ビューモデルがビューに関連付けられたら、ビューの更新イベントについて通知されます。 [ユーザー]によってモデルが更新された場合、[モデル]をクリックしてから、モデルを送信して、ビューがビューに縛られているときに自動的に更新するモデルを表示します。 MVVMはコードサイズを削減しますが、MVVMの実装は非常に困難であり、MVVMに基づいて大きなプロジェクトをデバッグすることは困難です。


?
プロジェクトの正しいアーキテクチャの選択には、開発する必要があるモジュールの理解が含まれます。一部の機能はMVCで優れている、一部はMVPを使用し、一部はMVVMを使用しています。 MVVMで作成されたプロジェクトをデバッグすることは非常に困難です。特に、データのバインディングとライブデータのために片側データフローがないプロジェクトをデバッグします。アプリケーションがソースから連続データストリームを受信し、通常のUI-Updateが必要であり、主に(80〜90%)片面通信(例:ソーラーセルアプリ、インバーターアプリ、またはその他のデバイスのステータス監視などのLive Data -UIの更新によりMVVMでうまく機能するなど、片側通信(例:Androidアプリにログを送信する電子デバイス)がある場合。これらのMVVMアプリケーションのデバッグは、データの主要な流れが一方的に容易になるため、簡単になります。
MVPは、Javaテストフレームワーク(Androidではなく)を介してビジネスロジックWRTユニットテストのテストを懸念している場合、Androidプロジェクトを作成するための良いアプローチです。 JavaテストフレームワークはJavaの依存関係を解決し、クリーンなプレゼンターレイヤーには、コンテキスト、共有予約、その他のcom.androidなどのAndroid関連の依存関係がありません。 * パッケージ。 MVPの欠点は、MVCまたはMVVMで記述された同じ機能を使用して、 20〜25%の追加コードを作成することになっていることです。テストケースとモジュールの単体テストに本当に興味がある場合は、MVPは良いです。 Javaテストキットを使用するMVPの場合、プレゼンターのインスタンスを作成し、テスト機能を実行します。
EG: new Presenter()。testsomeFunction() 。
MVCは、Androidで広く使用されています。 Google自体は、長年にわたってMVCのリポジトリであると書いています。現在、GoogleはGitHubリポジトリのためにMVVMを採用しています。これらのリポジトリは小さく、主にサンプルです。 MVCアプリケーションは、com.androidの依存関係がないため、Java固有のテストツールではないAndroidテストフレームワークを介してテストできます。 * Java固有のツールのパッケージ。
例:
注:何よりも最高の単一のアーキテクチャはありません。ある場合、他のアーキテクチャを学ぶ必要はありません。正しいアーキテクチャの選択は、初期要件、データフロー、スケーラビリティ、メンテナンス、更新(CRS)、テスト要件などのいくつかの要因に依存します。
これらの3つのAndroidアーキテクチャを除き、 「MVI -Model View Intent」と呼ばれるもう1つのアーキテクチャがあります。これは、Android開発者の間ではあまり人気がありません。 MVIに興味がある場合は、このリンクを確認してください。
https://github.com/saksham24/android-simple-mvi-pattern-with-mvp-mvvm-collaboration