2012-03-11 2 views
0

이라는 클래스가 있으며이 클래스는 Page 또는 Image까지 확장 할 수 있습니다. 각각 하나씩 데이터베이스에 삽입 메소드가 있습니다. PageImage의 삽입물에는 Document의 삽입 부가 포함됩니다.instanceof를 사용하는 경우입니까?

호출됩니다 어떤 방식을 결정하는 방법은 다음과 같이 먼저 클래스를 확인하는 경우 내 의심의 여지가 있습니다 :

if (doc instanceof Document){ 
    insertDoc(doc); 
} 
if (doc instanceof Page){ 
    insertPage(doc); 
} 
if (doc instanceof Image){ 
    insertImage(doc); 
} 

또는 다른 방법이, 난 항상 instanceof를 사용하는 것은 좋지 않다 들었 때문에 맡은 일.

편집 :이 경우 다형성이 작동하지 않습니다. 맞습니까? insert(Document doc), insert(Page doc)insert(Image doc)과 같은 것입니다.

답변

8

Document 클래스에 삽입 메서드를 구현하고이를 확장하는 클래스에서 적절한 메서드로 재정의하는 것이 더 좋을 것이라고 생각합니다. 그런 다음 doc.insert();으로 전화하십시오.

+0

나는 당신의 솔루션을 이해하고 있지만 레이어 (보기, TO, 데이터, 코어 등)를 모두 분리하고 있기 때문에 이것이 최선의 선택인지 아닌지 잘 모르겠습니다. 제가이 방법을 사용하면, 이것은이 조직을 무너 뜨릴 것이지만 그것은 효과가있는 방법입니다. 고맙습니다. –

4

나중에 문서를 확장하고 insert() 이외의 작업을 추가하는 유형을 더 추가하려는 경우 Visitor 디자인 패턴을 구현하는 것이 좋습니다. 그렇지 않으면 Bynyamin Sharet의 제안을 따르십시오.

+0

이 솔루션을 더 깊이 연구하고 최상의 선택인지 확인합니다. 고맙습니다. –

+0

이 접근법은 건축 관점에서 더 정확하다고 생각합니다. 행운을 비네! ;) – aviad

관련 문제