Zusammensetzung ist viel besser als Vererbung
Dieser Artikel erklärt die Tücken der Vererbung und bietet eine Lösung...
In diesem Artikel habe ich einige fiktiven Klassennamen etc. durch die hohe Empfindlichkeit des Projektes arbeite ich an, zu verwenden, also Geduld mit mir, wenn einige der Informationen ein bisschen seltsam scheint.
Nach der Arbeit mich etwa 6 Stufen tief in Vererbung merkte ich plötzlich, dass meine Factory-Klasse eine DateOfBirth hatte. Das war sicherlich nicht wünschenswert, aber ich konnte nicht mit meinem aktuellen Modell nichts dagegen tun. Meine Optionen wurden die Vererbung für Factory loswerden und alle Vorteile dafür zu verlieren (mit einem 'ZUSÄTZLICHEINFORMATIONEN' definierbare vom Benutzer zum Beispiel), oder zu ignorieren die DateOfBirth und zeigen Sie es nicht in der GUI.
Beide Optionen waren Müll. Statt zu einer von ihnen, ging ich stattdessen für eine ganz andere Option. Ich beschloss, fast alle Vererbung innerhalb meines Modells zu entfernen, und fügen Sie stattdessen zusammengesetzte Beziehungen.
Jetzt hat statt meiner Factoryklasse absteigend indirekt aus einer ObjectWithAdditionalInformation es keine Vorfahren-Klasse überhaupt. Um die gleiche Funktionalität zu erreichen habe ich jetzt eine unidirektionale Beziehung von der Fabrik zur Klasse AdditionalInformationHolder jetzt umbenannt. Diese Klasse enthält zusätzliche Informationen, die der Benutzer möchte eingeben und die Factory erstellt eine Instanz davon, wenn es erstellt wird.
Ich habe dann eine Frame/UserControl die GUI zur Eingabe weiterer Informationen, einschließlich ihrer eigenen ExpressionHandle entgegenstehen.
Die Schönheit dieses Ansatzes ist, dass ich jetzt vielleicht beliebige Objekte innerhalb meines Modells haben zusätzliche Informationen erfasst dagegen, wenn ich dies wünschen. Die GUI implementiert ich einfach drop Frame/UserControl auf das Formular des betreffenden Objekts und Stammkontext von den ExpressionHandle festgelegt.
Plötzlich habe ich ein Modell mit kaum Vererbung in ihm überhaupt. Ich kann Änderungen an den Klassen machen, ohne zu überprüfen, ob es kein den abgeleiteten Klassen (oder ihre Formulare) brechen, und ich habe keine Funktionalität überhaupt verloren.
Ich empfehle die Verwendung von Vererbung nur für Polymorphismus Vorteile nie bloß aus Gründen der Vererbung von Eigenschaften. Nur benutzen, wenn es eine elegante Lösung für ein Problem (wie in meinem Artikel Zusammensetzung und rekursive OCL beschrieben) ist nicht als eine Möglichkeit zu vermeiden, das gleiche Attribute/Verhalten auf eine neue Klasse eingeben zu müssen. Denken Sie daran, nur weil ein Gebäude und eine Person beide haben einen Namen, ein Datum der Empfängnis und eine Lage, macht sie nicht das gleiche!
Zusammensetzung ist viel besser als Vererbung
Zusammensetzung ist viel besser als Vererbung : Mehreren tausend Tipps, um Ihr Leben einfacher machen.
Dieser Artikel erklärt die Tücken der Vererbung und bietet eine Lösung...
In diesem Artikel habe ich einige fiktiven Klassennamen etc. durch die hohe Empfindlichkeit des Projektes arbeite ich an, zu verwenden, also Geduld mit mir, wenn einige der Informationen ein bisschen seltsam scheint.
Nach der Arbeit mich etwa 6 Stufen tief in Vererbung merkte ich plötzlich, dass meine Factory-Klasse eine DateOfBirth hatte. Das war sicherlich nicht wünschenswert, aber ich konnte nicht mit meinem aktuellen Modell nichts dagegen tun. Meine Optionen wurden die Vererbung für Factory loswerden und alle Vorteile dafür zu verlieren (mit einem 'ZUSÄTZLICHEINFORMATIONEN' definierbare vom Benutzer zum Beispiel), oder zu ignorieren die DateOfBirth und zeigen Sie es nicht in der GUI.
Beide Optionen waren Müll. Statt zu einer von ihnen, ging ich stattdessen für eine ganz andere Option. Ich beschloss, fast alle Vererbung innerhalb meines Modells zu entfernen, und fügen Sie stattdessen zusammengesetzte Beziehungen.
Jetzt hat statt meiner Factoryklasse absteigend indirekt aus einer ObjectWithAdditionalInformation es keine Vorfahren-Klasse überhaupt. Um die gleiche Funktionalität zu erreichen habe ich jetzt eine unidirektionale Beziehung von der Fabrik zur Klasse AdditionalInformationHolder jetzt umbenannt. Diese Klasse enthält zusätzliche Informationen, die der Benutzer möchte eingeben und die Factory erstellt eine Instanz davon, wenn es erstellt wird.
Ich habe dann eine Frame/UserControl die GUI zur Eingabe weiterer Informationen, einschließlich ihrer eigenen ExpressionHandle entgegenstehen.
Die Schönheit dieses Ansatzes ist, dass ich jetzt vielleicht beliebige Objekte innerhalb meines Modells haben zusätzliche Informationen erfasst dagegen, wenn ich dies wünschen. Die GUI implementiert ich einfach drop Frame/UserControl auf das Formular des betreffenden Objekts und Stammkontext von den ExpressionHandle festgelegt.
Plötzlich habe ich ein Modell mit kaum Vererbung in ihm überhaupt. Ich kann Änderungen an den Klassen machen, ohne zu überprüfen, ob es kein den abgeleiteten Klassen (oder ihre Formulare) brechen, und ich habe keine Funktionalität überhaupt verloren.
Ich empfehle die Verwendung von Vererbung nur für Polymorphismus Vorteile nie bloß aus Gründen der Vererbung von Eigenschaften. Nur benutzen, wenn es eine elegante Lösung für ein Problem (wie in meinem Artikel Zusammensetzung und rekursive OCL beschrieben) ist nicht als eine Möglichkeit zu vermeiden, das gleiche Attribute/Verhalten auf eine neue Klasse eingeben zu müssen. Denken Sie daran, nur weil ein Gebäude und eine Person beide haben einen Namen, ein Datum der Empfängnis und eine Lage, macht sie nicht das gleiche!
Zusammensetzung ist viel besser als Vererbung
By Wiezutun
Zusammensetzung ist viel besser als Vererbung : Mehreren tausend Tipps, um Ihr Leben einfacher machen.