2010-11-18 10 views
1

私は、特定のモデルに関する情報を知る必要があるドキュメントベースのアプリケーションで、複数のレイヤーの入れ子になったオブジェクトを持っている状況があります。オブジェクトへのインターフェイスの受け渡し、またはCocoaでの委任の使用?

具体的には、NSTextView、NSLayoutManager、およびNSTypesetterがあります。それぞれ、ドキュメントモデルを正しくレンダリングするためには、ドキュメントモデルに関する特定のプロパティを知る必要があります。

現在、私は各クラスをサブクラス化し、それらに私のモデルへの参照を持つプロパティを与えました。参照は、サブクラス化NSLayoutManagerに、私の文書コントローラから渡され、その後、サブクラス化NSTypesetterに渡されます。

@implementation MyLayoutManager : NSLayoutManager { 
    @private 
    MyModel *model; 
} 
@property (retain) MyModel *model; 
-(id)initWithModel:(MyModel *)model; 
@end 

@implementation MyTypesetter : NSATSTypesetter { 
    @private 
    MyModel *model; 
} 
@property (retain) MyModel *model; 
-(id)initWithModel:(MyModel *)model; 
@end 

モデルはController-> MyLayoutManager-> MyTypesetterから渡されます。これはおそらくあまりにも強く結合した少し冗長なようです。

デリゲートパターンの方が良いでしょうか?もしそうなら、それを設定する最良の方法は何ですか? Typesetterにはデリゲートはありませんが、LayoutManagerには既にデリゲートがあります。 Typesetterにデリゲートを追加し、LayoutManagerでデリゲートをオーバーライドする必要がありますか?それとも、私のモデルのインターフェースを譲り渡すだけでいいですか?

洞察力があれば幸いです。ありがとう。

答えて

1

一般にコントローラとの通信を排他的にコントローラに限定し、コントローラはモデルを関連する他のオブジェクトにタスクを委譲(必要に応じて関連情報を提供)することをお勧めします。

もっと多くのオブジェクト指向と正しいとはいえ、必ずしも最も美しいとは限りません。しかし、一般的には維持するのが一番簡単です。

Model ===> Controller ===> View 
       || 
       || 
       \/ 
      Other Objects 
+0

私は、単にビューに必要なデータをコントローラに要求するデリゲートメソッドの設定を終了しました。 – Donald

関連する問題