web-dev-qa-db-ja.com

Androidアプリケーションアーキテクチャ-推奨モデルは何ですか?

同様に、Webアプリまたはデスクトップアプリには3層またはn層(UI、ビジネス、データなど)があります。Androidアプリケーションの推奨構造は?クラスをグループ化するにはどうすればよいですか?どんなレイヤーがありますか?

私はちょうどAndroid dev(着信通知に応答する必要があるインターネットベースのアプリ))を始めたばかりで、私が目指している構造についての本当の感覚がありません。

59
MalcomTucker

IMHO、Android "want to"はMVCパターンに従いますが、ビューとコントローラーは通常、アクティビティで実際に結合されます。

単体テストが難しくなり、 単一責任原則 に従うことが難しくなります。

本当に素敵なAndroidここに提示されたアーキテクチャ が見つかりました。アイデアがあります。すべてが疎結合であるため、テストと編集がはるかに簡単です。

明らかに、他の多くの可能性があると確信しています(MVPパターン( Model View Presenter )-および AndroidのMVPについて話している回答 )が、あなたはまだそれを見てみる必要があります。

16
louiscoquio

私はAndroidに取り組んでいます。完全な単体テストと階層化されたアーキテクチャが一般的でうまく機能するサーバー側のバックグラウンドから9か月間なりました。

多くの試行錯誤を通して、Model View Controllerではなく_Model View Presenter_パターンを使用することを強くお勧めします。

私が見つけた大きな問題は、Activities/Fragmentsのライフサイクルが制御できないため、予期しない問題が発生する可能性があることです。

たとえば、メインのAndroidアプリはタブレットのランドスケープモードで使用することを望んでいます。これはOnCreateView()またはOnCreate()で行います。

Nexus 7では、デフォルトのビューはポートレートであるため、ポートレートモードでアクティビティを開始すると、コードはランドスケープに移動し、Android最終的にactivityを作成しますクラス3回!

ネットワークリクエストをonCreateに接続しましたが、この場合、最終的に3回発生します。

確かに、重複した呼び出しを探すロジックを追加できますが、私の意見では、UIをビジネスロジックから分割しようとする方が、アーキテクチャ的には良いでしょう。

ファクトリパターンを使用してアクティビティからプレゼンターを作成することをお勧めしますが、ファクトリが同じインスタンスのみを返すようにしてください。プレゼンターは、ネットワーク要求を実行し、重複を探し、キャッシュされた結果と一般的なビジネスロジックを返すためのロジックを含めることができます。

ネットワークコールの結果が返されたら、アクティビティ(onResume()のイベントに登録し、onPause()の間に登録解除する)が登録されているOttoなどのバスに投稿するか、アクティビティによって実装されるコールバックインターフェイスは、プレゼンターの最後のアクティビティに更新されました。

このように、presenterの下向きのコードはユニットテスト可能であり、不安定なUIレイヤーテストに依存しません。

16
FinalFive

Androidのアクション、ビュー、およびアクティビティは、Android UIを操作する方法で焼かれており、model-view-viewmodelパターンの実装です。これは、モデルビューコントローラと構造的に類似している(同じファミリで)。

私の知る限り、このモデルから抜け出す方法はありません。おそらく実行できますが、既存のモデルが持つすべての利点を失う可能性が高いため、独自のUIレイヤーを書き換えて機能させる必要があります。

MVCは次の場所にあります:

  • 解像度/ハードウェアなどにより、さまざまなXMLファイルで ユーザーインターフェイス を定義します。
  • ロケールなどにより、さまざまなXMLファイルで resources を定義します。
  • データを SQLite に保存するか、カスタムデータを/ assets /フォルダーに保存します。詳細については、 リソースとアセット を参照してください
  • ListActivityTabActivity などのクラスを拡張し、 inflaters によってXMLファイルを利用します。
  • モデルに必要な数のクラスを作成し、構造体として機能する独自のパッケージを作成できます。
  • 多くの tils がすでに作成されています。 DatabaseUtils、Html、

従うことができる単一のMVCパターンはありません。 MVCは、データとビューを混在させてはならないことを多かれ少なかれ述べているだけです。ビューは、データを処理しているデータまたはクラスを保持する責任があり、ビューに直接影響します。

しかし、それでも、Androidクラスとリソースを処理する方法は、MVCパターンに従うことを余儀なくされることさえあります。私の意見では、ビューに責任があるが、それでもなお、同時にコントローラーとして機能します。

ビューとレイアウトをxmlファイルで定義し、resフォルダーからリソースをロードし、コードでこのことを多かれ少なかれ避ければ、とにかくMVCパターンに従います。

15
Pentium10

[〜#〜] mvp [〜#〜]は、ほとんどの人がフォローしている最新のアーキテクチャ ここに小さなドキュメントがあります As ボブおじさんのきれいなアーキテクチャは、「アーキテクチャはフレームワークではなく意図についてです」と言います

このビデオを見る それはただ衝撃的です。

7
Shivaraj Patil

Android Architecture blueprints 専用のソースコードを使用したプロジェクトです。それらはすべて、いくつかの工夫を加えたMVPパターンに基づいています。また、コード行、テスト容易性、学習コスト、データの複雑さの増加のサポートに基づいて、さまざまなソリューションの 比較 を確認してください。これは、特に開発されたアプリと、ブループリントが最適なコンテキスト(市場投入までの時間、開発者、将来の計画など)に依存します。

2
pcjuzer