web-dev-qa-db-ja.com

モデルが変更されたときにビューを更新するにはどうすればよいですか?

私はMVCパターンを学んでいるので、これは非常に単純な質問かもしれません。

ビューで何かが発生すると(ユーザーがボタンをクリックするなど)、ビューがコントローラーを呼び出し、コントローラーがモデルを更新します(フラグをtrueに設定するなど)。ただし、ユーザーの操作なしでモデルが変化するいくつかのシナリオを想像できます。たとえば、N分後にデータのどこかで変更をトリガーするタイマーを言います。モデルが変更されました。それに応じてビューを更新する方法は?

3
Ignorant

これは、ビューの寿命に依存します。短期間のビューの場合、ビューをまったく更新しなくても十分な場合があります。次回ビューを再作成するときに、新しいモデルのコンテンツを表示するのに十分な場合があります。

長期にわたるビューの場合、 publisher-subscribe パターンのようなものを実装できます。つまり、ビューはサブスクライバーの役割を担い、別の場所(イベントマネージャーなど)に登録して、特定の種類のモデルの変更について通知を受けます。ただし、モデルはパブリッシャーの役割を果たし、データが変更された場合に応じて、対応するイベントをイベントマネージャーに送信します。したがって、ビューは、変更について通知を受けるたびに、特定のモデルデータを再度読み取ることができます。

また、ビューが読み取り専用機能のみを提供する場合、またはユーザーがモデルを変更する機能を許可する場合にも、違いが生じます。後者の場合、ビューに最初に表示されたデータがロードされてから更新が行われるまでの間に変更されたかどうかを調べるために、いくつかの衝突戦略を実装することをお勧めします。いくつかのユースケースでは、このようなテストに依存して、衝突が発生した場合にのみビューを更新することが適切な場合があります。

7
Doc Brown