2011-09-11 17 views
3

私はココアを学んでいます。私は、Cocoaのドキュメントアーキテクチャの基礎を形成する3つの主要なクラスを進んでいました。Cocoa MVCドキュメントアーキテクチャのコントローラは誰ですか?

  • NSDocumentサブクラス
  • NSWindowControllerまたはそのサブクラス
  • NSDocumentController

私はNSWindowControllerは、MVCの観点でコントローラでなければならないとNSDocumentモデルていると思いました。インタフェースビルダーで作成するビューは、基本的にビューです。それが正しい場合、NSWindowControllerまたはそのサブクラスはNSDocumentのインスタンスを取得し、すべての保存、ロード、更新タスクを処理する必要があります。しかし、ドキュメントと書籍を読むと、NSDocument自身がこれらのタスクを処理しているようです。モデルのようなコントローラの仕事の一部をしていると私はそれを消化するのが難しいと思う。私は何が欠けていますか?概念モデルを明確にできますか?

+0

コントローラはモデルにこれらのことを要求しますが、モデルは好きです。 – BoltClock

答えて

4

NSDocumentはモデルオブジェクトと見なすことはほとんどできません。それはモデルコントローラであり、データモデルを所有しています。また、モデル・オブジェクトは実行してはならないウィンドウ・コントローラを所有しています。 モデルコントローラは、ビューを所有するビューコントローラと混同しないでください。 したがって、私はNSDocumentをMode-View-Controllerパターンの要素のどれとも完全に一致させることはできないと言います。

+0

ええ、NSDocumentをモデルコントローラと考えるほうがいいかもしれません。私はそれが厳密にモデルであるという強い意見は本当にありません。 –

+0

私は今理解しています。私は 'NSDocument'をモデルオブジェクトと考えてミスを犯していました(私の防衛では、その名前**はモデルのように聞こえます)。あなたが言ったように、それは本当に**モデルコントローラ**です。 – Hemant

1

3つのクラスはすべてコントローラです。異なる種類のビューとさまざまな種類のモデルオブジェクトがあるように、異なる種類のコントローラも用意されています。 MVCの大きな特徴の1つは、特にビュークラスやモデルクラスでの再利用性を促進することです。コントローラの大きな責任は、これらの再利用可能なクラスをアプリケーションの特定のニーズに特化させることです。コントローラーはモデルとビューの仲介という観点から説明されることが多いですが、すべてのコントローラーの相互作用にはモデルとビューの両方が含まれている必要があります。

+0

Caleb(あなたが意味することを理解するために)ViewオブジェクトとModelオブジェクトを仲介しないコントローラの例を挙げることができます。 –

+0

@BobUeland「UINavigationController」は、モデルと全く話していないView Controllerの一例です。私はこの答えを書いてから約4年経ちましたが、私は、NSDocumentが直接的な意見を扱わないにもかかわらずコントローラの一種であると言っていると思っています。その意味で、 'NSDocument'はモデルオブジェクトを扱うがビューは扱わないので、もう一つの例です。 – Caleb

関連する問題