2010-11-23 3 views
2

본질적으로 비슷하지만 약간 다른 유형의 개체에서 작동하는 일련의 프로세스가있는 경우 단일 유틸리티 클래스에서 작업 유형을 통일합니까? 아니면 필 요할 각 개체에 기능을 직접 적용합니까? 기능을 활용 했나요?클래스를 유틸리티 클래스로 전달하는 것과 반대로 논리를 클래스에 넣을 수 있습니까?

저는 특정 사례에 대해 걱정하지 않지만,이 결정에 어떤 요소가 포함되는지 궁금합니다.

+0

이 질문은 나를 위해 너무 추상적입니다. 엔티티와 유틸리티 객체가 무엇인지 생각해 본다면 작업하기가 더 쉬울 것입니다. 실제 세부 사항에 들어가기를 원하지 않는다면, 상황과 비슷하게 고안된 인위적인 사례 일 수 있습니까? – aschepler

+0

특정 문제 만 묻지는 않지만이 결정에 어떤 요소가 포함되는지 더 궁금합니다. 나는 이것을 설명하기 위해 질문을 갱신 할 것이다. –

답변

1

개체의 클래스 조상, 각 개체 간의 논리의 실제 차이점 및 향후 다른 가능한 종류의 클래스에서이를 수행 할 필요가 있다고 생각합니다.

실용적인 클래스는 여러 클래스에 적용 할 수있는 기능이 거의 같고 미래의 클래스에 적용될 수있는 좋은 방법입니다.

다른 한편으로는 기능이 다른 경우 다른 유틸리티 유형의 큰 스위치/case 문으로 끝나기 때문에 differnet 객체 유형을 수용하기 위해 객체 자체에 구현해야 할 수도 있습니다.

+0

좋은 지적. 이 특별한 경우, 프로세스는 모든 오브젝트에 대해 매우 유사합니다 (각 오브젝트 유형에 대해 고유하지는 않음). –

0

두 가지 방법으로 문제를 해결할 수 있습니다. 하나는 일반적인 프로그래밍 (수평 다형성)을 사용하거나보다 일반적인 수직 계층 기반 구현을 사용하여 공격하는 것입니다.

결정은 다양한 데이터 유형간에 공유되는 유사성 유형을 기반으로해야합니다. 어떤 유형에서든 운영 될 수있는 완전하고 직교적인 계약을 정의 할 수있는 경우 제네릭을 쉽게 사용할 수 있습니다.

예를 들어 List, Dictionary 및 System.Collections.Generic 이름 공간 아래의 모든 클래스는 초기 버전의 .NET에서 해당되지 않는 일반 항목을 대체합니다.

다른 한편, .NET에서 우리는 ContainerControl에서 파생 된 것보다 UserControl 클래스 인 수직 계층의 예제로 사용할 수 있으며 가상 메서드를 사용하여 동작을 특수화하는 다른 컨트롤의 기본 역할을합니다.

대부분의 경우 클래스 계층 구조의 디자인에는 개발자가 자신의 경험과 재능에 의존 할 수 있기 때문에 항상 결정 론적으로 정의되지 않는 많은 판단 호출이 필요합니다. 가능한 모든 상황에서 보드 전체에 적용됩니다.

관련 문제