2011-05-10 4 views
6

성숙한 제품으로 작업하고 있고 제품의 50 %에 필요한 새로운 검색 기능이 필요하다고 가정 해보십시오. 이제 당신은 당신이 헤어지고 싶어하지 않는 SomeDao에 설립 된 인터페이스 상속 관계 ...Java 인터페이스 상속 및 확장

public interface MoneyDao 
    extends SomeDao<MoneyEntity> 
{ 
    //Operation common in much of the application 
    List<MoneyEntity> findByCriteria(MoneyCriteria criteria);  
} 

이 한 가정 ... 그것을 반복하지 않고 'findByCriteria (..)'메소드를 노출하는 방법은 무엇입니까 MoneyDao와 비슷한 다른 모든 장소에서 더 깨끗한 방식으로 필요합니까?

맨체스터 (Bare)를 염두에두고 가능한 모든 곳에서 SomeDao를 사용하고 수정하는 새로운 유형으로 캐스팅하지 않으려합니다.

감사합니다, 제임스

답변

5

당신이 자신의 인터페이스로 findByCriteria을 깨고 MoneyDao에서이를 연장 할 수 있습니까? 이런 식으로 뭔가 :

public interface MoneyDao 
    extends SomeDao<MoneyEntity>, MoneyFinder 
{ 
} 

public interface MoneyFinder 
{ 
    //Operation common in much of the application 
    List<MoneyEntity> findByCriteria(MoneyCriteria criteria);  
} 

지금 클래스 (들) 변경할 필요가 없습니다 MoneyDao을 구현하지만 MoneyFinder를 사용하여 주변 단지 findByCriteria 전달할 수 있습니다.

+0

OK, @Jonathon, 당신은 이보다 빠릅니다 :-) 나는 내 대답을 삭제하는 것 외에 다른 선택의 여지가 없습니다. – Riduidel

+1

@ Riduidel 다른 방식으로 똑같은 말을하는 다중 답이 꼭 나쁜 것은 아닙니다. –

+0

아, 저는 개인적으로 투표 분산과 상호 불일치 가능성을 피하는 것을 선호합니다. – Riduidel

1

그 모두는 검색 가능한 클래스를 원한다면 Dao입니다. 즉, Searchable 클래스 도 Dao이어야합니다. 이 경우에는 Dao Searchable을 만들기 위해 일반적인 접근 방식을 사용합니다.

interface SearchableDao<Entity, Criteria> extends SomeDao<Entity> 
{ 
    List<Entity> findByCriteria(Criteria criteria); 
} 

이제 수업은 간단한 Dao 또는 SearchableDao가 될 수 있습니다. SearchableDao는 또한 간단한 Dao입니다.

class MoneyDao implements SearchableDao<MoneyEntity, MoneyCriteria> 
{ 
    List<MoneyEntity> findByCriteria(MoneyCriteria criteria) {...} 
} 
+0

고마워, 그게 효과가 있지만 MoneyDao와 SomeDao 사이의 현재 관계가 깨지기 때문에 가능한 경우 피하고 싶습니다. – JamesC

+0

findDyCriteria (..)에 대한 액세스를 제공하는 FilterDao를 반환 한 SomeDao의 getDown()에 작업을 추가하려고 생각했습니다. 필요하지 않은 곳에서 지원되지 않는 예외를 throw해야한다는 뜻입니다. – JamesC

+0

@ JamesC MoneyDao와 SomeDao 사이의 현재 관계를 어떻게 깨트 렸는가? MoneyDao는 여전히 SomeDao입니다. 나는 제안 된 솔루션 중 하나가 SomeDao에 getFilter를 추가하는 것보다 깨끗하다고 ​​생각한다. 현재 MoneyDao 또는 새로운 기능을 사용하는 클라이언트에서 제한된 인터페이스를 사용할 계획이 아니라면 moneyDao에서 findByCriteria를 분리하여 무엇을 달성하려고합니까? –