구현할 OO 디자인을 해독하려고합니다. 기본적으로 PstnNumber는 본질적으로 항상 0으로 시작하는 10 자리 전화 번호입니다 (예 : 0195550000). 선행 0이 누락되면 번호 자동 수정을 허용하는 규칙이 도입되었습니다 (예 : 195550000). 어떤 설계 옵션이 시공시 자동 수정에 더 적합합니까?
START 편집
내가 원래 질문은 오해되었을 수 있습니다 실현 (감사합니다 친절 이미 대답 한 누구에게), 그래서 나는 시도하고 더 나은 시나리오를 설명하기 위해 편집했습니다.최종 편집
나는 일부 예비 개념을 연주하기 시작하고 (일부 수준)이 충분할 중 하나를 이동하거나 할 수있는 더 적절한 방법이 있다면 내가 물어 줄 알았는데?
개념 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;
}
}
개념 2 (제거)
개념 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;
}
}
나는 서브 클래스는 수의 동작을 변경하기 때문에 개념 1은 Liskov 교체 규칙을 위반하는 생각 재산 (내가 잘못 이해했는지 알기를 기쁘게 생각한다).
다른 제안 사항은 행복하게 접수됩니다.
클래스를 전혀 확장하지 않고 단순히 숫자를 자동 서식 지정하고 pstnnumber 개체를 반환하는 정적 생성자 함수를 사용하는 옵션이 없습니까? – Zed
@Zed : 예를 들어 PstnNumber AutoPstnFormatter.CreatePstn ("195550000"); ? –