2014-02-19 4 views
1

저는 Refactoring to Patterns이라는 책을 읽었습니다.이 책에는 "추출 합성"(214 페이지) 섹션이 있습니다."추출 슈퍼 클래스"대신 "추출해야하는 이유"는 언제입니까?

많은 하위 클래스에 공통된 기능이있는 경우 새로운 슈퍼 클래스에 해당 기능을 추출해야한다는 것을 의미합니다. 이것은 꽤 똑바로 들린다.

Extract CompositeExtract Superclass의 차이점은 무엇입니까?

음, 독서 및 도표에 따르면 ... 복합체는 자녀 클래스에 수퍼 클래스 인 이어야합니다.

enter image description here

질문 : 새로운 "CompositeTag"슈퍼 클래스를 작성하는 목적은 무엇인가 다음 그림을 참조하십시오? 왜 코드 복사를 원래 기본 클래스 (노드)로 옮기고 싶지 않습니까?

+0

공통 코드를 가져 오는 계층 구조의 높이를 제외하면 추출 슈퍼 클래스와 추출 합성은 차이가없는 것으로 보입니다. 이것이 바로 나에게 설명 된 것입니다 ... 만약 누군가 다른 사람이 2 센트를 무료로 추가하고 싶다면. –

답변

1

필자는 편리하게 사본을 갖고 싶지만, "Extract Composite"는 "Extract Superclass"의 특수한 경우입니다. composite은 상속 관계의 특정 유형이며 필자는 필자에게 필 요하다고 느꼈을 것 같아요. 따로 불러 냈다. 다이어그램은 실제로 복합체로 수행되는 작업의 종류를 실제로 보여줍니다. 주어진 예제에서 모든 하위 클래스가 복합 클래스가 아니라고 생각합니다. 따라서이 기능을 기본 클래스로 가져올 수 없습니다. 그래도 저자가 책을 조금 채우고있는 것처럼 느껴질 것입니다. :)

1

다음은 WPF의 VisualUIElement의 비유입니다. 우리가 몇 가지 컨트롤을 개발하는 척하고, 우리는 마우스 이벤트가 없으며 어떤 종류의 이유가 있어도 마우스 이벤트가 필요하다는 것을 발견했습니다.

Visual에 마우스 이벤트를 넣거나 UIElement에 넣을 수 있습니다. GUI의 일부가 아닌 것에 마우스 이벤트를 가지는 것은 의미가 없으므로 논리적으로는 UIElement에 속합니다.

응답 : 의미론, 특히 단일 책임 원칙. UIElement 등 포커스와 입력의주의를 기울여야한다 동안 Visual는, 효과 및 변환과 같은 것들을주의해야

내가 더 적절한 예를 제공하려고 싶지만, 내가 작업 클래스의 구체적인 설정되어 있지 않습니다 와. 논리적으로 독립적 인 하위 클래스로 기능을 분리 할 수 ​​있다면 꼭 그렇게하십시오.