2009-10-12 4 views
1

일반적으로 WCF 계약에서 상속을 사용하지 않으려 고 노력합니다. ResultA 및 ResultB : WCF에서 메시지 상속을 피하는 것이 좋습니까?

그러나 다음과 같은 상황에서

...

  • 나는 두 가지 중 하나를 초래할 수있는 서비스 작업이 있습니다.
  • 이 결과를보고하기 위해 응답 메시지에 부울/열거 형이 있습니다.
  • 응답 메시지에는 여러 가지 다른 속성이 있습니다. 이 중 일부는 ResultA의 경우에만 관련이 있으며 일부는 ResultB의 경우에만 관련이 있습니다.

나는 존재로서 내 옵션을 참조하십시오

  1. 이 특성이 관련되지 않은 경우 모든과, 그들이 널 (null)로 남아 있습니다 포함하는 하나의 응답 메시지 계약을 체결. 클라이언트는 bool/enum을보고 ResultA 또는 ResultB인지 확인하고 그에 따라 속성을 무시해야합니다.
  2. 공유 응답을 상속하는 두 개의 응답 메시지 계약이 있습니다. 하나는 ResultA와 관련 속성을 나타내고 하나는 ResultB와 관련 속성을 나타냅니다.

나는 여러 가지 이유로 옵션 2를 선호하지만, 상속 규칙보다 컴포지션이 깨졌습니다.

사람들은 어떻게 생각합니까?

답변

0

모든 규칙은 깨질 수 있습니다. 당신이 객체를 재사용하고 시스템이 상속을 사용할 수 있다면 ... 왜 사용하지 않을까요? Phil Haack은 그것을 ... 생각합니다.

일련의 인위적인 규칙으로 자신을 제한하면 훨씬 더 어려운 작업을 수행 할 수 있습니다. 우리가 상속을 사용할 수있는 이유가 있습니다. 그리고 나는 이것이 그들 중 하나라고 말합니다.

Prefer Composition Over Inheritance (Steve Rowe) 다른 각도입니다. 그러나 그것을 읽으면 그는 데이터가 아닌 기능의 재사용에 대해 이야기하고 있습니다.

2

내 직감은 "인터페이스 재 설계"입니다. 모호한 반환 유형을 가진 메소드를 갖는 것은 일반적으로 좋은 디자인의 표시가 아닙니다. 이것은 메소드의 모든 호출자에서 많은 불필요하고 오류가 발생하기 쉬운 로직을 발생시킵니다.

그래서 "비밀 옵션 번호 3"을 제안합니다. 두 개의 별도 메소드로 인터페이스를 리팩터링하십시오.

0

상속을 통한 합성이 바람직합니다! = 상속을 사용하지 마십시오 :-)

관련 문제