2010-11-18 30 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 

該模型是從控制器 - > MyLayoutManager-> MyTypesetter通過。這似乎有點多餘,可能過於緊密。

委託模式會更好嗎?如果是這樣,那麼最好的方法是什麼?排版工具沒有委託,但LayoutManager已經有一個。應該將一個委託添加到Typesetter,然後重寫LayoutManager上的委託?或者更好地堅持傳遞我的模型界面?

任何有識之士將不勝感激。謝謝。

回答

1

通常,將模型與模型的通信專門與控制器隔離是一個好主意,控制器然後根據需要將任務(根據需要提供相關信息)委派給其他對象。

雖然更多的OO和正確的,它並不總是最漂亮的。然而,它通常是最容易維護的。

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

同意。我最終設置了委託方法,它們只是向控制器詢問我需要的數據。 – Donald 2010-11-22 00:45:58