[解決済み】Androidではどのようなアーキテクチャパターンが使われていますか?[クローズド]
質問
モバイルプラットフォームについて少し調べているのですが、Androidではどのようなデザインパターンが使われているのか知りたいのですが。
例:iOSではModel-view-controllerがdelegationや他のパターンとともに非常に広く使用されています。
Androidでは、特にどのようなパターンを、どこで使っているのでしょうか?
EDIT
カーネルやDALVIKなどの奥深いところで使われているデザインパターンではなく、アプリケーション開発者がアプリケーションを開発する際に出会うであろうパターンについてお聞きしたいのです。
どのように解決するのですか?
の両方を使ってみました。
モデルビューコントローラー
(MVC)と
モデルビュープレゼンター
アンドロイド開発のためのアーキテクチャパターン。私の発見は、モデル-ビュー-コントローラはうまく機能しますが、いくつかの問題"quot;があることです。それは、あなたがAndroidをどのように認識しているかによります。
Activity
クラスがあります。それはコントローラなのか、それともビューなのか?
実際の
Activity
クラスは、Android の
View
クラスは、ユーザーへのウィンドウの表示と、ウィンドウのイベント(onCreate、onPauseなど)を処理します。
つまり、MVCパターンを使用する場合、コントローラは実際には疑似ビューコントローラとなります。なぜなら、setContentViewで追加したビューコンポーネントで、ユーザーにウィンドウを表示し、少なくとも様々なアクティビティのライフサイクルイベントのイベントを処理するからです。
MVCでは、コントローラがメインのエントリーポイントになるとされています。Androidの開発に適用する場合、アクティビティがほとんどのアプリケーションの自然なエントリポイントであるため、これが事実であるかどうかは少し疑問があります。
このため、個人的には モデルビュープレゼンター パターンは、Androidの開発に最適なパターンです。このパターンにおけるビューの役割は、なので。
- エントリーポイントとして機能する
- レンダリングコンポーネント
- ユーザーイベントのプレゼンターへのルーティング
これにより、このようにモデルを実装することができます。
表示 - は、UIコンポーネントを含み、それらのイベントを処理します。
プレゼンター - これはモデルとビューの間の通信を処理します。モデルへのゲートウェイと見なしてください。つまり、もしあなたが複雑なドメインモデルを持っていて、ビューがそのモデルの非常に小さなサブセットを必要としている場合、プレゼンターの仕事はモデルへの問い合わせと、ビューの更新になります。例えば、テキストの段落、見出し、単語数を含むモデルを持っているとします。しかし、あるビューでは、ヘッドラインだけを表示すればよいのです。すると、プレゼンターはモデルから必要なデータを読み出し、それに応じてビューを更新します。
モデル - これは基本的にあなたの完全なドメインモデルであるべきです。うまくいけば、上記のようなケースに対処するための特別なメソッドを必要としないので、あなたのドメインモデルをよりquot;tight"にするのに役立ちます。
モデルをビューから完全に切り離すことで、(プレゼンターを使用することで)モデルのテストもより直感的に行えるようになります。ドメインモデル用のユニットテストと、プレゼンター用のユニットテストを持つことができます。
試してみてください。個人的にはAndroidの開発にはとても合っていると思います。
関連
-
[解決済み】パッケージ名(Google Analytics)に一致するクライアントが見つからない - 複数のproductFlavorsとbuildTypes
-
[解決済み】メソッド 'findViewById(int)' を解決できない。)
-
[解決済み】android.content.ActivityNotFoundException: 明示的なアクティビティクラスを見つけることができません。
-
[解決済み】IllegalStateException: ViewPager で onSaveInstanceState の後にこのアクションを実行できません。
-
[解決済み】android.content.res.Resources$NotFoundExceptionの取得:androidにリソースが存在する場合でも例外が発生する。
-
[解決済み] Mockito lenient() を使用する場合
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] MVPとMVC、その違いは何ですか?
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Android: Intent エラーを処理するアクティビティは見つかりませんでしたか?どのように解決するのか
-
[解決済み] 現在のテーマでスタイル 'coordinatorLayoutStyle' を見つけることができませんでした。
-
[解決済み] [Solved] Unsupported method: ベースコンフィグ.getApplicationIdSuffix()
-
[解決済み】新しいAVDを作成すると、CPU/ABIフィールドに「システムイメージがインストールされていません」と表示される。
-
[解決済み】ビューのルートとしてNULLを渡さないようにする(膨張したレイアウトのルート要素でレイアウトパラメータを解決する必要がある)。
-
[解決済み】sendUserActionEvent()がnullである。
-
[解決済み】getCheckedRadioButtonId()が無駄なintを返す?
-
[解決済み] AndroidでBluetoothが有効かどうかのチェックに失敗する(REQUEST_ENABLE_BTを変数に解決できない)。
-
[解決済み] MVPとMVC、その違いは何ですか?
-
[解決済み] AndroidにおけるMVCパターン