Essayer de déchiffrer une conception OO appropriée à implémenter. Le scénario de base est que vous avez un PstnNumber qui est essentiellement un numéro de téléphone à 10 chiffres qui commence toujours par 0 (par exemple 0195550000). Une règle a été introduite pour permettre la correction automatique d'un nombre si le 0 principal est manquant (par exemple 195550000).Quelle option de conception est la plus appropriée pour l'auto-correction sur la construction?
DÉBUT EDIT
Je réalise peut-être été mal compris la question initiale (merci de bien vouloir ceux qui ont déjà répondu), donc j'ai modifié pour essayer de mieux expliquer le scénario.
FIN EDIT
J'ai commencé à jouer avec des concepts préliminaires et pensé que je demande s'il y avait une façon plus appropriée pour aller ou faire un de ces suffisent (à un certain niveau)?
Concept 1
public class PstnNumber
{
public virtual string Number { get; set; }
public PstnNumber() { }
public PstnNumber(string number)
{
this.Number = number;
}
}
public class AutoFormattedPstnNumber : PstnNumber
{
public override string Number
{
get { return base.Number; }
set { base.Number = value.PadLeft(10, '0'); }
}
public AutoFormattedPstnNumber() : base() { }
public AutoFormattedPstnNumber(string number)
{
this.Number = number;
}
}
Concept 2 (supprimé)
Concept 3
public class PstnNumber
{
public bool AutoCorrect { get; set; }
private string number;
public virtual string Number
{
get { return (this.AutoCorrect) ? this.number.PadLeft(10, '0') : this.number; }
set { this.number = value; }
}
public PstnNumber() : this(false) { }
public PstnNumber(bool autoCorrect)
{
this.AutoCorrect = autoCorrect;
}
public PstnNumber(string number) : this(false)
{
this.Number = number;
}
public PstnNumber(string number, bool autoCorrect) : this(autoCorrect)
{
this.Number = number;
}
}
Je pense que Concept 1 peut constituer une violation de la règle de substitution Liskov parce que la sous-classe modifie le comportement du numéro propriété (heureux d'apprendre si j'ai mal compris cela).
Toutes les suggestions alternatives seraient reçues avec bonheur.
N'existe-t-il pas une option pour, où vous ne développez pas du tout la classe, et ayant simplement une fonction de créateur statique qui formate automatiquement le nombre et retourne un objet pstnnumber? – Zed
@Zed: Suggérez-vous par exemple. PstnNumber AutoPstnFormatter.CreatePstn ("195550000"); ? –