Ich habe eine Situation, in der ich mehrere Ebenen verschachtelter Objekte in einer dokumentenbasierten Anwendung habe, die Informationen über ein bestimmtes Modell benötigen.Schnittstellen an Objekte übergeben oder Delegierung in Cocoa verwenden?
Insbesondere habe ich eine NSTextView, NSLayoutManager und NSTypesetter, die jeweils bestimmte Eigenschaften über mein Dokumentmodell kennen müssen, um es richtig zu rendern.
Derzeit habe ich jede der Klassen in Unterklassen unterteilt und ihnen eine Eigenschaft zugewiesen, die einen Verweis auf mein Modell enthält. Die Referenz wird von meinem Dokument Controller weitergegeben, auf die subclassed NSLayoutManager, und dann an die subclassed NSTypesetter geben:
ist@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
Das Modell von Controller- geben> MyLayoutManager-> MyTypesetter. Dies scheint ein wenig überflüssig und vielleicht zu eng gekoppelt.
Wäre das Delegiertenmuster besser? Wenn ja, wie kann man das am besten einrichten? Schriftsetzer hat keinen Delegaten, aber LayoutManager hat bereits einen. Soll ein Delegat zu Typesetter hinzugefügt werden, dann überschreiben Sie den Delegaten in LayoutManager? Oder ist es besser, nur bei der Übergabe der Schnittstelle meines Modells zu bleiben?
Jeder Einblick wäre willkommen. Vielen Dank.
Einverstanden. Am Ende habe ich Delegiertenmethoden eingerichtet, die den Controller einfach nach den Daten gefragt haben, die ich für die Ansicht benötigt habe. – Donald