我有一种情况,我在基于文档的应用程序中有几层嵌套对象,需要知道有关某个模型的信息。
具体来说,我有一个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传递。这看起来有点多余,可能太紧密了。
代表模式会更好吗?如果是这样,那么设置它的最佳方法是什么?排版机没有委托,但LayoutManager已经有委托。应该将一个委托添加到Typesetter,然后覆盖LayoutManager上的委托?或者只是坚持传递模型的界面更好?
任何见解都将受到赞赏。感谢。
答案 0 :(得分:1)
通常,最好将与模型的通信专门与控制器隔离,然后控制器将任务(必要时提供相关信息)委托给其他相关对象。
虽然更多OO并且更正确,但它并不总是最漂亮的。但这通常是最容易维护的。
Model ===> Controller ===> View
||
||
\/
Other Objects