J'ai une situation où j'ai plusieurs couches d'objets imbriqués dans une application basée sur un document qui ont besoin de connaître des informations sur un certain modèle.Passer des interfaces à des objets ou utiliser la délégation dans Cocoa?
Spécifiquement, j'ai un NSTextView, un NSLayoutManager et un NSTypesetter, chacun d'eux ayant besoin de connaître certaines propriétés de mon modèle de document pour le rendre correctement.
Actuellement, j'ai sous-classé chacune des classes, et leur a donné une propriété qui a une référence à mon modèle. La référence est transmise de mon contrôleur de document, au sous-classé NSLayoutManager, puis transféré au sous-classé 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
Le modèle est passé de Controller-> MyLayoutManager-> MyTypesetter. Cela semble un peu redondant un peut-être trop étroitement couplé.
Le modèle de délégué serait-il meilleur? Si oui, quelle est la meilleure façon de le mettre en place? Typesetter n'a pas de délégué, mais LayoutManager en a déjà un. Devrait ajouter un délégué à Typesetter, puis remplacer le délégué sur LayoutManager? Ou vaut-il mieux s'en tenir à transmettre l'interface de mon modèle?
Tout aperçu serait apprécié. Merci.
D'accord. J'ai fini par mettre en place des méthodes de délégué qui demandaient simplement au contrôleur les données dont j'avais besoin pour la vue. – Donald