2013-05-20 3 views
2

지금 당장은 8 개의 메소드가 ClassA에 대한 기능을 제공하는 약 10 개의 메소드가 포함 된 래퍼 클래스가 있습니다 & 2 개의 메소드가 ClassB에 기능을 제공하므로 ClassA와 ClassB를 래퍼 클래스 생성자로 인스턴스화 할 계획입니다. 적절한 방법으로 사용하십시오.C# 클래스 디자인 문제

이 디자인은 괜찮습니까? 아니면 뭔가 빠졌습니까? 이 접근법의 단점은 사용자가 잘못된 생성자 매개 변수를 전달하고 잘못된 메서드를 사용하면 호출하는 앱이 예외를 수신한다는 것입니다. 아래

참조 샘플 코드 : 사전에

Public class Wrapper 
{ 
ClassA _a = null; 
ClassB _b = null; 

public Wrapper(bool createClassA) 
{ 
    if (createClassA) 
    { 
    _a = new ClassA(); 
    } 
    else 
    { 
    _b = new ClassB(); 
    } 
} 

public string Method1() 
{ 
    return _a.ReturnSomething(); 
} 

//similarly Method2 to Method8 calls _a class methods. 

public void Method9() 
{ 
    return _b.DoSomething(); 
} 

public string Method10() 
{ 
    return _b.ReturnTestMessage(); 
} 
} 

감사합니다.

+5

은 무엇인가를 호출하는 경우 래퍼가 명시 적으로 예외를 throw하는

다른 방법으로는, 더 나은 될 수있다 cstor에 조건부 초기화가있는 지점? –

+2

이것은 ... 잘못된 것 같습니다. 인터페이스 사용법을 알고 있습니까? –

+1

아니이 디자인은 괜찮지 않아 ..... 왜 이러는거야? –

답변

5

일반적인 기능을 호출하지 않는 두 개의 클래스가 있습니다. 래퍼 클래스에 넣는 것은 두 클래스가 완전히 다른 것을하기 때문에별로 의미가 없습니다.

클래스가 개념적으로 연결되어 있다면 (이 클래스들을 함께 생각하면) 아마도 네임 스페이스에 넣는 것이 더 합리적일까요?

namespace YourNamespace 
{ 
    class ClassA 
    { 
     // ... 
    } 

    class ClassB 
    { 
     // ... 
    } 
} 
+0

예, 클래스 A와 B는 동일한 네임 스페이스에 있습니다. 내가 필요한 것을 분명히 말해 줄 수 있니? – user972255

2

당신이 두 개의 클래스를 감쌌다 방법은 (틱) 괜찮습니다, 그러나 방법은 당신은 단지 하나의 클래스가 인스턴스화되고있는이 조건 만들었다 확인하지 않습니다. 래퍼 클래스는 투명하게 사용할 수 있어야합니다. A 또는 B 또는 생성 방법에 대해 알지 못하고 래퍼 클래스의 모든 메서드를 호출 할 수 있다는 것을 의미합니다.

클래스 A와 B가 별개라면, 나는 당신이 그것들을 전혀 감쌀 필요가 있는지 의문을 가질 것입니다. 랩퍼 클래스가 일종의 Facade 또는 Adapter 인 경우가 아니면.

+0

예, 클래스 A와 B는 별개이지만 클라이언트 응용 프로그램이 이미 이전에 클래스 A를 참조했던 인터페이스를 참조하지만 이제 클래스 B 기능을 추가하려고합니다. – user972255

+0

내가 이해하지 못하는 이유는 왜 그들이 수업을 직접 만들지 못하게하는 이유입니까? 당신은 부울을 전달하기 위해 그것들을 넣는다. –

0

이것은 매우 일반적인 코드이므로 조언하기가 어렵습니다. 이 래퍼가 사용자에게 제공하는 이점은 무엇입니까?

잘못된 구성에 대해 메서드를 사용하는 것에 대한 구체적인 관심사는 createClassA을 저장하고 메서드 내부를 확인하거나 method_X_ 메서드 각각에서 _b 또는 _a를 null로 비교하여 해결할 수 있습니다. 호출자가 "잘못된"포장 오히려 아무 것도 반환하지 않습니다 이상의 방법, 또는 null 또는 빈 문자열 (등)