2014-06-08 5 views
3
내가 다른 프로그래머에 의해 작성된 일부 코드를 읽고

를 사용하여 디자인에 대한 나쁜이다, 그는 응용 프로그램에 대한 몇 가지 디자인을 만든 응용 프로그램 클래스는 서로 같은 파생 무늬? 우선 클래스와 응용 로직의 관계를 이해하기가 어렵습니다. 이것이 제 2 센트입니다. 또 뭐라고 할 수 있니?중첩 된 파생 클래스

+0

짧은 답변은 "의존적"입니다. – VahidNaderi

답변

3

상속에 비해 구성을 선호하기 위해 주위에 떠 다니는 약간의 조언이 있습니다. 장점은 종종 더 유연하다는 것이며, 더 단단한 커플 링을 더 어렵게 만듭니다. (이 문제에 대한 논의는 where-does-this-concept-of-favor-composition-over-inheritance-come-from, DeepClassHierarchies, deep-class-inheritance-hierarchy-bad-idea, long-inheritance-hierarchy 개를 참조하십시오).

특히 C#의 경우 구성에 상당한 보일러 플레이트가 필요할 수 있습니다. 결국 구성 요소/기본 클래스의 많은 기능을 노출하려면 수동으로 노출해야합니다. 반대로 상속을 사용하면 모든 것을 노출하는 것이 매우 쉽습니다.

다른 경우에는 밀접하게 결합 된 스파게티 몬스터를 쉽게 만들 수 있으므로 상속을 아끼지 않을 때는 사용하는 것이 좋습니다. 그러나 고전적인 역동적 인 파견과 모든 것이 요구되는 경우가 있습니다. 당신의 개념이 is-a 관계보다 has-a 관계에 더 잘 맵핑 되더라도, 구성의 어법 (wordiness)은 상당한 부담이되는 경우도 있습니다.

그래서 이런 종류의 코드는 유지하기가 어렵지만, 때때로 그럴 가치가 있습니다. 계층 구조가 불필요하게 깊다는 구체적인 예가 있습니다. 그러나 오래된 코드가 몇 가지 사마귀로 자라는 것은 정상입니다. 이것이 최악의 경우라면 자신을 행운이라고 생각하십시오.

+0

API가 너무 커서 수동으로 전달할 수 없기 때문에 상속을 사용하는 경우 해당 API가 너무 길어질 수 있습니다. 항상 도움이 될 수는 없지만 안타깝게도 .NET 라이브러리 자체는 이와 관련하여 나쁜 예입니다. 일반적으로 작은 공공 영역은 모든 종류의 작업을 더 쉽게 만듭니다. –

관련 문제