説明された方法は、イベントとパブリッシュ/サブスクライブモデルの使用によるものでした。基本的に、モデルは単なるデータであり、ビュー/ GUI/UIの知識はありません。モデルは通常、そのデータを操作し、操作などを実行できる単なる抽象オブジェクトです。
ビューは、モデルの変更に応答し、通常はこのデータをユーザーに表示する別のクラスです。以前は、ビューとモデルを結合せずにこれがどのように発生するかはわかりませんでしたが、イベントで説明すると、混乱が大きくなります。これは、モデルに、何か面白いことが起こったときにそれ自体が発生する公開イベントが含まれていることを意味しますか?たとえば、チェスのゲームをプログラミングしている場合、ピースが移動されると、モデルはPieceMoved
必要な情報(どのピース、どこからどこに移動したかなど)を使用してイベントを発生させ、ビューはそのような情報をサブスクライブできます。イベントを実行してから、古い正方形から新しい正方形に移動するピースのアニメーションを表示します。
それでも私を混乱させる部分は、コントローラーの正確な性質です。モデルとビューに新しい情報がどのように提供されるかを理解するのに苦労しています。コントローラにモデルとビューへの参照が含まれていると思います。チェスの例を続けると、コントローラーはユーザー入力に応答して(たとえば、ピースを移動するために)、モデルにどのピースをどこに移動したいかを提案しますか?次に、モデルはこの情報を取得し、それが正当な動きであるかどうかを確認します。正当な動きである場合は、それに応じてモデルを更新し、それに応じPieceMoved
てビューが反応してグラフィカルレルムを更新するイベントを発生させますか?
最後に、コントローラーはどのピースが動かされようとしているのかをどのように見つけますか?そのタイプのものはビューに深く関係しているようです(たとえば、移動には、最初に移動したい部分をクリックしてから、目的の正方形をクリックする必要があります)。コントローラがマウスクリックに応答してそれらの座標をモデルに送信すると想像しますが、モデルはこれらの座標を変換してどのピースが選択されたかを見つける方法をどのように知るのでしょうか?それはビューに深く関係していませんか?ビューは、モデルとコントローラーに単に応答するのではなく、何らかのロジック処理を実行する必要があるように見えますが、その場合、ビューは適切なビューではなくなります(ビューとモデルの組み合わせではありません)。