La Composition est beaucoup mieux que l'héritage
Cet article explique les pièges de l'héritage, et offre une solution...
Dans cet article, je vais utiliser certains ficticious les noms de classe, etc en raison de la sensibilité du projet sur lequel je travail, alors pardonnez-moi si certaines des informations semble & nbsp un peu étrange.
Après avoir travaillé moi-même sur 6 niveaux de profondeur dans l'héritage soudain j'ai réalisé que mon Usine de classe & nbsp eu un DateOfBirth. & nbsp Cela n'est certainement pas souhaitable, mais avec mon modèle actuel je ne pouvais rien faire à ce sujet. & nbsp Mes options pour se débarrasser de l'héritage de l'Usine et de perdre tous les avantages de le faire (le fait d'avoir 'AdditionalInformation' définissable par l'utilisateur par exemple), ou d'ignorer la DateOfBirth et ne pas l'afficher dans l'interface graphique.
ces Deux options étaient des conneries. & nbsp au Lieu de prendre l'un d'eux, je suis allé pour un de complètement différent de l'option à la place. & nbsp j'ai décidé de supprimer presque toutes les successions au sein de mon modèle, et ajouter composite relations à la place.
Maintenant, & nbsp lieu de ma classe Usine décroissant indirectement à partir d'un ObjectWithAdditionalInformation il n'a pas de classe ancêtre à tous. & nbsp afin d'obtenir la même fonctionnalité j'ai maintenant une relation à sens unique entre l'Usine et le désormais renommé AdditionalInformationHolder classe. & nbsp Cette classe contient les informations supplémentaires que l'utilisateur veut entrer, et l'Usine crée une instance de celui-ci quand il est créé.
ensuite, j'ai créé une Image/UserControl qui tiendrait de l'interface graphique pour la saisie des informations supplémentaires, y compris ses propres ExpressionHandle.
La beauté de cette approche est que je peut maintenant avoir tous type d'objet à l'intérieur de mon modèle en mesure d'avoir des informations supplémentaires enregistrées contre si je le souhaite. & nbsp Pour mettre en œuvre l'interface graphique j'ai simplement glisser le Châssis/UserControl sur la forme de l'objet en question et de définir le contexte de la racine de la ExpressionHandle.
Soudain, j'ai un modèle avec peine en héritage à tous. & nbsp je peux apporter des modifications à des classes sans avoir à vérifier qu'il l'habitude de tout casser sur les classes descendantes (ou leurs formes), et je n'ai pas perdu toute fonctionnalité à tous.
je vous recommande fortement de l'utiliser héritage le polymorphisme des avantages, jamais simplement pour le plaisir de l'héritage de propriétés. & nbsp utiliser Seulement quand c'est une solution élégante à un problème (tel que celui décrit dans mon article de la Composition et récursive OCL), plutôt que comme un moyen d'éviter d'avoir à saisir les mêmes attributs et/ou du comportement sur une nouvelle classe. & nbsp Rappelez-vous, juste parce qu'un Bâtiment et une Personne à la fois un nom, une date de conception, et un emplacement de, ne pas faire la même chose!
La Composition est beaucoup mieux que l'heritage
La Composition est beaucoup mieux que l'heritage : Plusieurs milliers de conseils pour vous faciliter la vie.
Cet article explique les pieges de l'heritage, et offre une solution...
Dans cet article, je vais utiliser certains ficticious les noms de classe, etc en raison de la sensibilite du projet sur lequel je travail, alors pardonnez-moi si certaines des informations semble & nbsp un peu etrange.
Apres avoir travaille moi-meme sur 6 niveaux de profondeur dans l'heritage soudain j'ai realise que mon Usine de classe & nbsp eu un DateOfBirth. & nbsp Cela n'est certainement pas souhaitable, mais avec mon modele actuel je ne pouvais rien faire a ce sujet. & nbsp Mes options pour se debarrasser de l'heritage de l'Usine et de perdre tous les avantages de le faire (le fait d'avoir 'AdditionalInformation' definissable par l'utilisateur par exemple), ou d'ignorer la DateOfBirth et ne pas l'afficher dans l'interface graphique.
ces Deux options etaient des conneries. & nbsp au Lieu de prendre l'un d'eux, je suis alle pour un de completement different de l'option a la place. & nbsp j'ai decide de supprimer presque toutes les successions au sein de mon modele, et ajouter composite relations a la place.
Maintenant, & nbsp lieu de ma classe Usine decroissant indirectement a partir d'un ObjectWithAdditionalInformation il n'a pas de classe ancetre a tous. & nbsp afin d'obtenir la meme fonctionnalite j'ai maintenant une relation a sens unique entre l'Usine et le desormais renomme AdditionalInformationHolder classe. & nbsp Cette classe contient les informations supplementaires que l'utilisateur veut entrer, et l'Usine cree une instance de celui-ci quand il est cree.
ensuite, j'ai cree une Image/UserControl qui tiendrait de l'interface graphique pour la saisie des informations supplementaires, y compris ses propres ExpressionHandle.
La beaute de cette approche est que je peut maintenant avoir tous type d'objet a l'interieur de mon modele en mesure d'avoir des informations supplementaires enregistrees contre si je le souhaite. & nbsp Pour mettre en œuvre l'interface graphique j'ai simplement glisser le Chassis/UserControl sur la forme de l'objet en question et de definir le contexte de la racine de la ExpressionHandle.
Soudain, j'ai un modele avec peine en heritage a tous. & nbsp je peux apporter des modifications a des classes sans avoir a verifier qu'il l'habitude de tout casser sur les classes descendantes (ou leurs formes), et je n'ai pas perdu toute fonctionnalite a tous.
je vous recommande fortement de l'utiliser heritage le polymorphisme des avantages, jamais simplement pour le plaisir de l'heritage de proprietes. & nbsp utiliser Seulement quand c'est une solution elegante a un probleme (tel que celui decrit dans mon article de la Composition et recursive OCL), plutot que comme un moyen d'eviter d'avoir a saisir les memes attributs et/ou du comportement sur une nouvelle classe. & nbsp Rappelez-vous, juste parce qu'un Batiment et une Personne a la fois un nom, une date de conception, et un emplacement de, ne pas faire la meme chose!
La Composition est beaucoup mieux que l'héritage
By commentfaire
La Composition est beaucoup mieux que l'héritage : Plusieurs milliers de conseils pour vous faciliter la vie.