web-dev-qa-db-ja.com

MVVMがビュー間で通信する

Mediatorパターンを使用してビューモデル間で通信できることはわかっていますが、ビューについてはどうですか?

ビューBの機能をトリガーするボタンがビューAにあるとしましょう。 Mediatorを使用することもできますが、ハックのように見えます。

これが私の考えです:

enter image description here

3
Asperger

ビューBの機能をトリガーするボタンがビューAにあるとします。

MV(V)Cパターンによると、どのビューにも「機能」はありません。

機能は、必要に応じてmodelを変更することによってアプリケーションの状態を処理するcontrollerレイヤーにある必要があります。

これで、モデルデータを表示し、コントローラーを介して操作するビューレイヤーを(並列または順次に)いくつでも持つことができます。

modelは、変更を伝達するためのインフラストラクチャを提供するため、ビューBは特定のプロパティに登録して変更情報を取得し、ビューAがそのプロパティを変更したときに自身を更新できるようにします。


それで、機能性のために、(いくつかのプレフィックス)ViewControllerと呼ばれる追加のクラスがありますか?ビューモデル用のコントローラーもありますか? (ViewModelController)–アスペルガー

その名前にあなたの信念を置かないでください。結局のところ、名前は風の中のほこりです。

重要なのは、この3つのレイヤーmodelcontroller、およびviewを処理する必要があるということです。異なる名前(MVC、MVVC、MCP)はバリエーションにすぎず、私にはそれほど意味がありません。

また、必ずしもそれらを個別のプロジェクト、パッケージ、またはクラスに配置する必要はありません。パターンは基本的に通信の方向についてです:

  • modelは、それ自体が提供するインターフェース(主にgetter/setterメソッドと*Listenerインターフェース)。
  • controllermodelsインターフェースを介してmodelとのみ通信します。
  • ビューはmodelから表示するデータ(および変更情報)を取得し、ユーザー入力をcontrollerレイヤーの呼び出しに変換します。 model自体を更新することはありません。
4
Timothy Truckle