2010-11-18 5 views
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 

модели передается от контроллер-> MyLayoutManager-> MyTypesetter. Это кажется немного избыточным, возможно, слишком тесно связанным.

Будет ли образец делегата лучше? Если да, то каков наилучший способ установить это? У наборащик нет делегата, но у LayoutManager уже есть один. Должен ли добавить делегата в Typetter, переопределить делегат в LayoutManager? Или лучше просто придерживаться интерфейса моей модели?

Любое понимание будет оценено по достоинству. Благодарю.

ответ

1

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

В то время как больше OO и правильно, это не всегда самое красивое. Однако, как правило, это проще всего поддерживать.

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

Согласен. Я закончил настройку методов делегатов, которые просто попросили контроллер для данных, которые мне нужны для представления. – Donald

 Смежные вопросы

  • Нет связанных вопросов^_^