1

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

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

任何见解将不胜感激。谢谢。

4

1 回答 1

1

通常,将与模型的通信完全隔离到控制器是一个好主意,然后控制器将任务(根据需要提供相关信息)委派给其他相关对象。

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

Model ===> Controller ===> View
               ||
               ||
               \/
          Other Objects
于 2010-11-18T18:40:46.810 回答