Prenez ce code suivant à partir d'un exemple système HR. L'utilisateur a la capacité de connecter une absence et peut être de différents types, y compris les vacances et la maladie. Ce serait un modèle de domaine sur une orje telle que NHibernate. C'est un exemple - veuillez ne pas questionner pourquoi l'emplacement serait requis, supposons qu'il s'agit d'une spécification. P> L'utilisateur veut changer le type - il pensait que l'employé était malade, puis se souvient que c'était une fête. Encore une fois, vous pouvez penser que ceci est une mauvaise conception, mais le traite comme une exigence - cela représente un problème qui est arrivé à plusieurs reprises pour moi. P> Le problème est que vous ne pouvez pas modifier le type d'objet de la maladie en absence. Généralement, le conseil serait de favoriser la composition sur l'héritage (bande de quatre) et de faire cela: p> mais quand je le fais, quand les propriétés sont-elles spécifiques aux vacances et aux maladies Allez (emplacement et doctorteNoteProvisible respectivement)? P> P>
5 Réponses :
hmmm, sans en savoir plus sur vos besoins, je dirais que la bonne conception n'est pas de changer d'objet d'absence à un objet de maladie (ou inversement) mais de supprimer simplement celui que vous ne voulez pas et créez un nouveau. du type que vous faites. Quelque part, vous devez maintenir une collection d'absences, non? P>
Vous êtes correct que les classes ne changent pas. p>
Pourquoi avez-vous besoin de changer le type d'objet? p>
Vous aurez une sorte de collecte d'absences, il suffit de remplacer l'élément en question. P>
Concevabilité plutôt que de remplacer, gardez même la demande initiale et marquez-la comme expulsée, cela pourrait être important pour les fins de l'audit. p>
Trois réponses disant tout en disant la même chose, très difficile à choisir entre eux, mais celle-ci a juste eu le bord parce qu'elle considérait les sentiers d'audit, etc. Mike Mozhaev et Ray Talk sont des upvotes, mais cela reçoit la tique!
Ce n'est pas le bon endroit pour la composition sur l'héritage. Ici, l'héritage est approprié. Et si vous devez changer le type d'absence, créez un nouveau et Supprimer ancien. P>
Essayez donc de déplacer toutes les fonctionnalités spécifiques de type sur Si vous manipulez AbsendeType CODE> Dérivés. S'ils ont besoin de quelque chose de la classe mère
absence code>, vous pouvez leur transmettre sa référence. Bien que j'essaierais d'éviter cela. P>
absence code> à l'interface de la classe de base, rien ne change, vous pouvez garder votre ancien code. Maintenant, si vous avez manipulé des dérivés spécifiques, vous devrez saisir
absencetype code> à partir d'une absence spécifique
absence code> et faites toutes les mêmes choses sur eux - toujours pas beaucoup à changer. Si vous aviez
holiday.dosomething () code>, vous avez maintenant
holiday.type.dosomething () code>. P>
Je ne sais pas où vous suggérez de stocker des propriétés spécifiques aux vacances / malade?
Donc, oui, absencetype code> serait un type de type de valeur, sans identité, sans identité à une seule adresse
absence code> objet, et tout type de comportement spécifique doit être déplacé vers ses dérivés: < Code> Maladynessabsensetype Code>,
HolidayabsenseCetype CODE>, ...
Ceci est une réponse Simmilar à Eulerfx. Il semble être un modèle que les gens utilisent que je ne suis pas totalement familier avec. Je ne sais toujours pas vraiment. Pourriez-vous me signaler à un exemple de code s'il vous plaît?
Je voudrais modeler cela en ayant une hiérarchie de type pour un absence de type ou absenqueur:
abstract class AbsenseReason { } class HolidayAbsenseReason : AbsenseReason { public string Name { get; } }
J'ai conçu qu'il y aurait malénsabsensecetype, Holidabsensetype héritant depuis Absendetype. J'aurais probablement dû expliquer cela mieux dans mon post. Cependant, je l'avais conçu comme une entité, pas une valeur. Je ne sais pas comment vous suggérez de stocker les informations spécifiques à une absence du type d'absence réelle? Dans mon concept, il ne contiendrait que des informations sur les vacances / la maladie en général, pas sur une instance spécifique. Je serais intéressé à en savoir plus sur votre théorie?