将接口传递给对象,还是在Cocoa中使用委托?

时间:2010-11-18 17:05:08

标签: objective-c cocoa delegates cocoa-design-patterns

我有一种情况,我在基于文档的应用程序中有几层嵌套对象,需要知道有关某个模型的信息。

具体来说,我有一个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上的委托?或者只是坚持传递模型的界面更好?

任何见解都将受到赞赏。感谢。

1 个答案:

答案 0 :(得分:1)

通常,最好将与模型的通信专门与控制器隔离,然后控制器将任务(必要时提供相关信息)委托给其他相关对象。

虽然更多OO并且更正确,但它并不总是最漂亮的。但这通常是最容易维护的。

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