MVCパラダイムでは、モデルはビューから分離されていると想定されています。自身が描画する必要のあるデータを取得するために、コントローラーにデータを要求し、コントローラーがモデルにデータを要求します。このようにして、GUIから情報を切り離します。それが役立つ場合は、モデルコントローラービューと考えてください。したがって、ほとんどの場合、コントローラーはモデルを「所有」します。
たとえば、cs193pでは、CalculatorViewController
(Controller)にCalculatorBrain
(Model)プロパティがあり、これと相互作用して、ビューに表示する方程式の結果を取得します。
あなたの特定の例では、SolarSystemViewController
はおそらく、への強い参照を持っているでしょう。それは、更新が必要なときにそれ自体を描画できるように、SolarSystem
それが渡すデータをポーリングします。SolarSystemView
また、は、ユーザーが操作しSolarSystemView
たときに通知して、実行できる他のタスクの中でも、他のビューを表示したり、を更新したりできるようにする場合があります。SolarSystemViewController
SolarSystem
CocoaとCocoaTouchのMVCパラダイムは、Smalltalkのように他の場所で見られるMVCのより一般化されたバージョンとは少し異なることに注意してください。たとえば、MVCのWikipediaページを見ると、図はこれまで学習してきたものとは異なって見えるはずです。実際、GoF(デザインパターン)はMVCをこのように記述しています。
MVCは3種類のオブジェクトで構成されています。モデルはアプリケーションオブジェクトであり、ビューはその画面表示であり、コントローラーはユーザーインターフェイスがユーザー入力に反応する方法を定義します。MVC以前は、ユーザーインターフェイスデザインはこれらのオブジェクトをひとまとめにする傾向がありました。MVCはそれらを切り離して、柔軟性と再利用性を高めます。MVCは、ビューとモデルの間にサブスクライブ/通知プロトコルを確立することにより、ビューとモデルを分離します。ビューは、その外観がモデルの状態を反映していることを確認する必要があります。モデルのデータが変更されるたびに、モデルはそれに依存するビューに通知します。それに応じて、各ビューはそれ自体を更新する機会を取得します。このアプローチでは、モデルに複数のビューをアタッチして、さまざまなプレゼンテーションを提供できます。モデルを書き直さずに、モデルの新しいビューを作成することもできます。
どちらの場合も、モデル自体がビューに接続して更新します。ただし、iOSでは、モデルとビュー間の相互作用はコントローラーを介して処理されます。これは、cs193pの最初のセッションと、MVC関係に関するApple自身のドキュメントで詳しく説明されています。そうすれば、他の場所でモデルとビューを再利用するためにコントローラーコードを書き直すだけで済みます。
明確にするために、cs193pのMVC図を次に示します。
