3

現在、アプリケーションのリファクタリングと再編成を行っています。モデルとビューの間の分離の一部と、それらのコントローラーが減少していることに気づきました。クリーンアップを行いたいと思います。

私のアプリでは、NSPersistentDocument、NSWindowController、およびモデルクラスといういくつかの主要なクラスを使用しています。

NSPersistentDocumentクラスは、「モデルコントローラー」として機能します。モデルクラスのインスタンスを所有し、モデルとのすべての相互作用を管理します。

NSWindowControllerクラスは、「ビューコントローラ」として機能します。メインウィンドウを所有し、メインウィンドウ内のビューの相互作用を管理します。このクラスは、ウィンドウが定義されているnibファイルのファイルの所有者でもあります。

ここで私が見ている問題は、私が本当の「コントローラー」を持っていないということです。私の現在の設計では、モデルコントローラーとビューコントローラーがお互いを認識している必要があります。2つの間に瞑想オブジェクトがないため、モデルとビューが明確に分離されておらず、複数のビューまたはモデルをサポートすることが問題になります。

既存の両方のコントローラーから、モデルコントローラーとビューコントローラーの間のコントローラーとして機能する新しい「コントローラー」クラスに機能を移動したいと思います。結局のところ、これはまだMVCデザインパターンであり、構造が少し増えています。

ただし、これがCocoaのドキュメントベースのアプリアーキテクチャにどのように適合するかを理解するのは困難です。

私が持っている最大の質問は、この新しいコントローラーオブジェクトをどこでどのように作成するかです。これはCocoaのアーキテクチャにどのように適合しますか?私はCocoaのアーキテクチャと戦っていますか?これを行うためのより良い方法はありますか?

ありがとう。

4

2 に答える 2

1

「モデル コントローラー」と「ビュー コントローラー」を持っていることに対する素晴らしい本能。これは、M と V が通常どのように結びついているかについての非常に優れた精神的分類法です。ただし、MVC に純粋な「C」を使用して、操作全体を結び付けることができます。

アプリの 1 つのコントローラーについて話している場合: (big-C) コントローラーは、アプリの main() 関数から派生するものと考えてください。古い Cocoa チュートリアルでは、このオブジェクトは多くの場合 AppController と呼ばれます。UIApplication のデリゲートであるかどうかはわかりませんが、そうでない場合はapplicationDidFinishLaunching:、プロジェクトのアプリ デリゲートのメソッドでそのようなマスター コントローラーを作成することを検討する必要があります。その AppController は、モデル オブジェクトをセットアップ (および所有) し、UI が発生するルート ビュー コントローラーをセットアップ (および所有) できます。

ドキュメントアーキテクチャの各モデル/ビュー「ペア」に1つずつ、複数のインスタンスがある仲介コンポーネントについて話している場合は、そのようなものも作成してください。DocumentController必要な種類の名前ですが、Cocoa には、必要な種類の機能を反映している場合と反映していない場合があるものの 1 つが既にあります。「DocumentManager」は別の候補名です。

于 2010-02-24T06:20:12.427 に答える
0

Cocoa Design Patternsのコピーを入手して、これらの質問に答えてから、いくつかの質問に答える必要があるようです。

第 2 章では、ArrayController をモデル コントローラーとして (使用している永続的なドキュメント モデル コントローラーではなく) 使用する MVC パターンを扱います。

于 2010-02-16T21:32:24.557 に答える