2010-12-06 4 views
1

첫 번째 질문 : 윈폼은 - 다중 상속을

는 기본적으로 나는 닷넷 윈폼 프로젝트에 여러 형태의 상속을 achief 싶습니다을 시뮬레이션합니다.

우리는 UIForm과 UIWizard라는 두 가지 기본 클래스가있는 프레임 워크를 사용합니다. 불행히도 우리는 이러한 양식을 사용하여 자체 구현을 시작해야합니다.

위에는 다음과 같은 구조가 있습니다. UIForm은 OurForm의 수퍼 클래스입니다. UIWizard는 OurWizard의 수퍼 클래스입니다. OurForm과 OurWizard는 꽤 많은 쌍둥이입니다.

... 기회
OurForm OurCrudBase, OurListBase, OurSearchBase,이 서류-상황 인 반면 "서류"- 관련 속성과 메소드를 포함 OurWizard : 자체
OurForm는 다른 형태의 슈퍼 클래스입니다 많은 양식과 관련이 없습니다. 기존의 서류뿐만 아니라 클라이언트, 통계 등 그래서 여기에 우리가 CrudBase 및 DossierBase 둘 다 양식을 원하는

입니다

: 설상가상으로, 우리는 최근에 완전히 새로운 상황이 형태를 추가하기 시작했습니다. 또는 ListBase 및 ClientBase 등의 양식. 단일 상속으로이를 수행하려면 기본 폼의 양이 폭발적입니다 (즉 DossierBase + CrudBase + ListBase 등). 그래서 우리는 그렇게하고 싶지 않습니다.

우리는 UIForm 사실 UIWizard이 아니라 그냥 "한 단계"로라고 말하여 UIForm을 삭제 조사하고 있습니다
솔루션. BaseClasses의 양은 이미 절반으로 줄어들 것입니다.

기본 클래스

실제로 두 가지 범주로 나눌 수 있습니다
- 기능 : 서류는, 클라이언트, 통계, ...
- 기술 :는 Crud, 목록, 검색, ...

UIForm이 될 것입니다 기술적 또는 기능적 형태의 수퍼 클래스. 다른 유형은 전략으로 구현됩니다.

기능 상속 클래스 :
+ 양식은 가능성이 기능 클래스 중 하나가 될 수 있습니다. "양식"과 "클라이언트"모두 양식을 작성할 수 없습니다. 그런 식으로 상속은 여기서 의미가 있습니다.
+ 기술 기능을 전략으로 구현하는 것이 가능할 수 있습니다. Load, Save, Closing, Closed ... 폼에서 발생할 수있는 모든 것을위한 메소드를 기본적으로 가진 인터페이스를 생각하고있었습니다 ...
- 서로 다른 전략 간의 상호 작용은 아마도 엉망이었을 것입니다. (즉, 당신이 구현은 서로를 나사하지 않는 형태로 모두 목록과의 CRUD 넣으면 것을 확인)

기술 파생 클래스 :
+
은 어떻게 든 내가이 방법으로 더 좋은 느낌을 가지고있다. (부정적인 점만 나열 할 수는 있지만)
- 예를 들어, List + Crud와 결합하려는 경우 중복 클래스가 다시 필요합니다.그러나 복제 양이 적습니다.
- 고객, 서류, 통계에는 공통점이 없습니다. 따라서 전략으로 전환하는 것은 다소 어렵습니다.

나는 내 자신의 질문에 이미 거의 대답했다고 생각한다. 하지만 동의하니? 아니면 내가 이것을 지나치게 생각하고 있다고 생각합니까? 나는 단지 수퍼 클래스에 받아 들일만큼 많이 넣고 가능한 한 상속을해야합니까?
아니면 문제를 해결하기위한 완전히 다른 접근 방법일까요?

도움이 될 것입니다! 전혀 상속이 필요한 이유

건배, 당신의 설명을 바탕으로
WOUTER

+0

다중 상속은 틀림없이 나쁜 것입니다. 내 경험상 양식 상속은 대개 매우 나쁜 것입니다. 나는 여러 형태의 상속을 가져야하는 악몽을 상상할 수 없습니다. –

답변

3

, 나는 아주 이해가 안 돼요. 상속 대신 컴포지션을 사용하는 것이 더 나을 것 같은 것 같습니다.

다른 문제를 처리하기 위해 구성 요소, 컨트롤 및 코드 템플릿을 만든 다음 필요한 항목으로 끌어 올 수 있습니다. 재정의가 필요한 메서드/속성을 재정의하고 구성 요소/컨트롤에서 사용자가 수행해야하는 사용자 지정 작업을 수행하기위한 쉬운 방법 (예 : 이벤트 발생)을 제공하는 단일 기본 폼만 가질 수 있습니다.

+0

고마워! 나는 그것을 들여다 볼 것이다. 상속과 컴포지션의 빠른 참조 : http://stackoverflow.com/questions/49002/prefer-composition-over-inheritance – Laoujin

관련 문제