2010-11-18 2 views
1

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.

Répondre

1

Généralement, c'est une bonne idée d'isoler la communication avec le modèle exclusivement au contrôleur, qui délègue alors des tâches (fournissant des informations pertinentes si nécessaire) à d'autres objets impliqués.

Alors que plus OO et correct, ce n'est pas toujours le plus joli. Il est généralement le plus facile à maintenir cependant.

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

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

Questions connexes