これを行う方法はいくつかあります。
モデル内の単一のコントローラーへの参照を持ちます。モデルはこのコントローラーにイベントを送信し、他のコントローラーは階層を介してそれを認識し、ビューに渡します
関心のあるすべてのコントローラーをモデルのリスナーにします (モデルにはリスナーのリストがあります)。ビューはコントローラーを介して変更を認識します
関心のあるすべてのビューをモデルのリスナーにします。(ビューは変更を直接知るようになります)
どれが適切で、その理由は何ですか?
これを行う方法はいくつかあります。
モデル内の単一のコントローラーへの参照を持ちます。モデルはこのコントローラーにイベントを送信し、他のコントローラーは階層を介してそれを認識し、ビューに渡します
関心のあるすべてのコントローラーをモデルのリスナーにします (モデルにはリスナーのリストがあります)。ビューはコントローラーを介して変更を認識します
関心のあるすべてのビューをモデルのリスナーにします。(ビューは変更を直接知るようになります)
どれが適切で、その理由は何ですか?
あなたの3番目のオプションは古い学校です。ビューはモデルによって通知され、ビューはこれを処理する方法を決定します。大丈夫ですが、他のオプションの方が優れています。
2番目のオプションは良さそうです。ビューはコントローラによって通知されます(ビューの更新とモデルの更新には別のコントローラがあることを確認してください)。そのため、コントローラーはイベントをビューに渡す前に変更できます。コントローラーは、ビューのデータをさらにカスタマイズできます。ビューはこれを行うべきではありません。仕事は何かを表示することだけです(オプション3では、ビューはこれを行う必要があります)。
最初のオプションは、階層を持つオプション 2 の小さな改善です。複雑なシナリオでは、通過するイベントをフィルタリングする方が良い場合があります。しかし、通常、これはオーバーヘッドを爆破します。そのため、読みにくいです。
私はオプション 2 を選択します。これは、単純なコードと複雑なアクションのオプションの最良のトレードです。