Передача интерфейсов объектам или использование делегирования в Какао? - PullRequest
1 голос
/ 18 ноября 2010

У меня есть ситуация, когда у меня есть несколько слоев вложенных объектов в приложении на основе документов, которые должны знать информацию об определенной модели.

В частности, у меня есть 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? Или лучше придерживаться передачи интерфейса моей модели?

Любое понимание будет оценено. Спасибо.

1 Ответ

1 голос
/ 18 ноября 2010

Обычно рекомендуется изолировать связь с моделью исключительно с контроллером, который затем делегирует задачи (предоставляя соответствующую информацию по мере необходимости) другим задействованным объектам.

Хотя больше ОО и правильнее, оно не всегда самое красивое. Однако, как правило, его легче поддерживать.

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