Передача интерфейсов объектам или использование делегирования в Какао?
У меня есть ситуация, когда у меня есть несколько слоев вложенных объектов в приложении на основе документов, которые должны знать информацию об определенной модели.
В частности, у меня есть 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 ответ
Обычно рекомендуется изолировать связь с моделью исключительно с контроллером, который затем делегирует задачи (предоставляя соответствующую информацию по мере необходимости) другим задействованным объектам.
Хотя больше ОО и правильнее, оно не всегда самое красивое. Это, как правило, проще всего поддерживать, однако.
Model ===> Controller ===> View
||
||
\/
Other Objects