J'ai un certain nombre de classes qui sont tous liés sur le plan conceptuel, mais un peu plus, donc au Niveau de détail que d'autres. Par exemple, ces trois classes ont des propriétés presque identiques (bien que les fonctions membres varient):Demande de Creational Conception/Motif Suggestion
public class RelatedA : IRelatedType
{
public string Name { get; set; }
public string Value { get; set; }
public DateTime Stamp { get; set; }
}
public class RelatedB : IRelatedType
{
public string Name { get; set; }
public string Value { get; set; }
public DateTime Stamp { get; set; }
}
public class RelatedC : IRelatedType
{
public string Name { get; set; }
public string Value { get; set; }
public DateTime Stamp { get; set; }
public int Special { get; set; }
}
Il y a deux autres classes qui sont conceptuellement liés au 3 ci-dessus, mais peut être un peu différente sage mise en œuvre :
public class RelatedD : IRelatedType
{
public string Name { get; set; }
public string Statement { get; set; }
}
public class RelatedE : IRelatedType
{
public string Name { get; set; }
public string Statement { get; set; }
public bool IsNew { get; set; }
}
Les instances de ceux-ci peuvent être créés par une usine basée sur une sorte de « type » valeur énumérée. Le problème est que plus tard lorsque ces objets sont utilisés (dans une couche d'affaires, par exemple), il pourrait y avoir beaucoup de code comme ceci:
IRelatedType theObject = TheFactory.CreateObject(SomeEnum.SomeValue);
if (theObject is RelatedC)
{
RelatedC cObject = theObject as RelatedC;
specialVal = cObject.Special;
}
else if (theObject is RelatedD)
{
RelatedD dObject = theObject as RelatedD;
statementVal = dObject.Statement;
}
else if (theObject is RelatedE)
{
RelatedE eObject = theObject as RelatedE;
statementVal = eObject.Statement;
isNewVal = eObject.IsNew;
}
Cela pourrait se répéter dans de nombreux endroits. Y a-t-il une meilleure approche de la conception que je devrais utiliser (il doit y avoir)?