2016-06-13 6 views
0

あなたはMVPとイベント駆動パターンに精通していると思います。
私の知る限り、MVPとイベント駆動型のパターンは、責任を持って分離して読みやすくするように設計されています。しかし、イベントバスのようなライブラリを使うことでイベント駆動が容易になります。MVP対アンドロイドアプリケーションで駆動されるイベント

私の質問は、イベントとサブスクライバパターンを使用してメソッドの責任を分けることができれば、アプリケーションアーキテクチャをMVPに変更するメリットは何ですか?

私の質問の2番目の部分は、イベントライブラリ(Eventbusなど)をMVPパターンと共に使用する可能性です。

答えて

0

EDIT:これをクリーンアップして短縮しました。

イベントドリブンアーキテクチャーとMVCアーキテクチャーの利点は、あなたの質問が示唆しているように相互に排他的だとは思いません。イベント駆動型であり、MVCアーキテクチャとの一貫性のあるコードを設計できます。

イベントドリブンとは、特定のイベントが発生したときに実行されるイベントハンドラがあることを意味します。イベントは低レベル(マウスの動きとキーボードの動き)を開始し、ツールキットを介して上位のハンドラに転送します。 MVCは、ハンドラの位置をどのように整理し、ハンドラがビジネスロジックとどのようにインターフェイスするかに関係しています。

EventBusに戻ると、 EventBusを通してすべてのUIイベントを指していて、モデルへのすべての変更がEventBusを経由してビューに戻ると、EventBusライブラリがMVCアーキテクチャのControllerの重要な部分を占めると言えます。

MVCについて考えるとき、私の目標は、ビジネスロジックとデータをデータの提示から切り離すことです。 Eventbusのようなものはあなたがそれを手助けすることができます。あなたのコントローラクラスはあなたのモデルをEventBusに結びつけ、UIを反対側に差し込みます。完了したら、モデルはイベントストリームが与えられたことだけを知っています。イベントストリームがGUI、テスト装置、またはハードウェアデバッガによって供給されるかどうかはわかりません。

+0

しばらくの間、イベント駆動型コードを使用しました。イベント駆動型のコードは、MVCパターンのように動作するという意見に本当に同意します。このMVCパターンでは、ビューからイベントの発生場所がわからない場合があります。しかし、私の質問は、イベント駆動型アーキテクチャはMVCパターンに置き換えることができるという2番目の主張にあります。イベントバスを使用すると(例えば、。)、私のアプリでMVPパターンを使う必要はないと思いますか? – Mehrdad

+0

イベントドリブンがMVCを置き換えるとは言いませんでした。これはMVCと併用することができます。おそらく私はあなたがEvent Drivenの意味を誤解していたでしょう。つまり、低レベルのイベント(タイマーのオーバーフローやユーザーからのボタンのクリック)は、ビジネスロジックを含む上位層まで浸透します。高水準コードは、操作の順序を予測/制御することはできません。実際、いくつかの操作は異なるスレッドで同時に実行することができます。反対にポーリングループのようなものがあります。そこでは、何かが起きるまでタイマーとボタンの状態が繰り返し確認され、ループがハンドラを呼び出します。 – Teto

+0

私はまだ誰かとこれについて議論していましたが、私はまだあなたを誤解しているかもしれません。イベントバスを使用してプログラムを「イベント駆動ではない」ようにすることを示唆していますか?またはMVPではない?イベント駆動型ではない場所でもUIツールキットを見つけるのは難しいです。そして、EventBusは、モデルからビューを隠すのに(すべてではない)長い道のりを歩んでいます。だからあなたはあなたが得られていないと思う恩恵はどれですか?なぜ? – Teto

2

イベントドリブンアーキテクチャは通信用です。あなたは、あなたのアプリの疎結合コンポーネント間でメッセージ/イベントを送信するためにそれを使用します。 特典:コンポーネントの追加/削除の手間を省くことができます。つまり、サイト運営者などを変更せずにサブスクライバを削除することができます。

MVPはアプリケーションロジックを構成するためのものです。これは、ビジネスロジックをGUIから遠ざけるのに役立ち、Viewのイベントを処理する中間者としてPresenterを導入し、適切なModelを使用してすべてのViewのイベントに対応するビジネスロジックを進め、Viewにデータをフォーマットします。 利点:UIロジックとBusiness Logicの間の境界線を描画し、具体的なUIスタッフなしでビジネスロジックまたは両方の種類のロジックをテストすることができます。

ここで最初の部分は、アプリケーションロジックを構成する方法と、アプリケーションでロジックが正しく実装されることを保証する方法(ユニットテスト)であるため、MV *はEventBusではなくユーザーを助けることができます。

第2の部分:はい、EventBus/MessageBusはMVPと一緒に使用することができます。たとえば、MVPを使用してView、Presenter、Modelにフラグメントを構成し、EventBus/MessageBusを使用して、フラグメントと他のアクティビティ、アプリケーション内のフラグメント間の通信を可能にします。

MessageBusとMVPの両方を提供する実際のフレームワークは、http://robo-creative.github.io/mvpです。どのように組み合わせて動作させるかを知りたい場合は、次のガイドラインをお読みください。http://robo-creative.github.io/mvp/presenter-features.html

+0

アンドロイドアプリケーションでMVPまたはMVCを使用することをお勧めしますか?コンポーネントは互いに疎結合しているためです。アクティビティはコントローラとして機能し、その間に(遷移アニメーションなどを提供するような)ビューが可能です。 – Mehrdad

+0

MVPが優先されます。アクティビティはプレゼンタやコントローラとしては機能しません。はい、それはビューになる可能性があります。 – Robo

関連する問題