特定のモデルに関する情報を知る必要があるドキュメントベースのアプリケーションに、ネストされたオブジェクトのレイヤーがいくつかある状況があります。
具体的には、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 でデリゲートをオーバーライドする必要がありますか? それとも、モデルのインターフェースを継承することに固執する方がよいのでしょうか?
任意の洞察をいただければ幸いです。ありがとう。