2011-02-09 3 views
1

두 가지 유형이 있다고 해봅시다.서브 클래스에서 계산 된 값을위한 최상의 설계 패턴?

ClassA 
{ 
    int ValueA; 
    int CalculatedA; 
} 

ClassB 
{ 
    int ValueA; 
    int CalculatedA; 

    int ValueB; 
    int CalculatedB; 
} 

CalculatedB에는 ValueAValueB이 필요합니다. 나는 이것을 구현하는 가장 좋은 패턴을 결정하려고 노력하고있다.

옵션 1 : 서브 클래스 ClassA 및 추가 값을 추가하십시오. 하위 클래스에서 재정의되는 공통 Update() 메서드가 있어야합니다. 이것은 모델의 간단한 코드이지만 이러한 클래스를 만드는 코드는 미리 작성할 모델을 알아야하며 이러한 유형의 목록을 반복하는 코드는 추가 필드를 처리하기 위해 유형을 검사해야합니다.

옵션 2 : 별도의 클래스에 추가 속성을 추가하고 거기에 CalculatedB에 대한 업데이트 코드가 있습니다. 이 문제는 ClassBValueA이 업데이트되는 시점을 알기위한 몇 가지 방법이 필요하다는 것과 이러한 클래스에 INotifyPropertyChanged과 같은 것을 구현할 필요가 없다는 것입니다. 이를 수행하는 또 다른 방법은 추가 속성 클래스에 일종의 공용 업데이트 메서드를 포함하고 ValueA이 업데이트 될 때 주 클래스에서 해당 메서드를 호출하도록하는 것입니다. 또한 바람직하지 않습니다.

옵션 3 :ValueBCalculatedB이 null 입력 가능 유형 인 ClassB 만 있으면됩니다. 패스.

더 이상 있습니까? 어느 쪽을 선택하겠습니까?

+0

나는 닷넷 그물이 아닙니다. 여기에 친구 같은 것을 사용할 수 있습니까? – vrbilgi

+0

친구가 도움을 줄 수는 있지만, 내부 메서드 나 설정자를 공개하는 것과 동일한 문제입니다. 공용은 더 작은 집합입니다. –

답변

1

ClassB가 ClassA와 관련이없는 경우 하위 클래스 작성은 좋은 방법이 아닙니다. ClassB.CalculateB이 크게 ValueA에 의존하고 있기 때문에 BTW

public class ClassA{ 
    public int ValueA {get;set;} 
    //... 
} 

, 닷넷에서 우리가 일반적으로 공공 필드를 노출하지 않지만, 공공 속성 (C#을 가정), 왜 그냥 즉석에서 값을 계산하면 그렇게하지 재산 변경에 대해 걱정할 필요가 없습니다.

public class ClassB { 
    public int ValueB {get;set;} 
    public int getCalculateB(ClassA a){ 
     //... 
    } 
} 
+0

클래스가 관련되어 있습니다. 하지만 그렇지 않으면 좋은 지적입니다. 또한 속성을 사용하고 있는데 Get ... Set을 작성하기에는 너무 게으른 것이 었습니다. 문제의 일부. –

+0

classB가 classA를 상속하는 것이 좋다고 생각되면 옵션 1에서 언급 한 문제를 피하려면 다음을 고려할 수 있습니다. 계산 값을 얻는 방법을 다시 설계하고 factory 클래스/메서드를 사용하여 클래스를 생성합니다. – xandy