2015-01-12 2 views
2

질문은 자체를 이해하는 패턴에 관한 것이지 특정 구현에 관한 것이 아닙니다.DAO에는 어떤 방법이 포함되어야합니까?

나는 DAO 패턴과 DAO에 포함이 켜지지 어떤 방법을해야했다 arised 질문에 대해 읽은? 예를 들어,

public interface UserDAO{ 

    public User getUserById(Integer id); 

    public void deleteUser(Integer id); 

    public void updateUser(Integer id, User user); 

    public void createUser(User user); 
} 

우리는 인터페이스가 DAO -pattern을 만족 말할 수 있습니까? 그렇지 않은 경우 어떤 메소드를 추가/삭제해야합니까?

답변

4

것은 우리는 당신이 갈 수있는 것보다 더 일반적인 방법으로 이야기하는 경우 :

public interface GenericDao<D>{ 

    public D get(Long id);// as Id use Long instead of Integer, Ids can be very large numbers, Int can be not enough 

    public Collection<D> getList(SearchCriteria crit); //for retrieving more than one element 

    public void remove(Long id); 

    public void update(D entity); // remember that updated record should have already id inside, you can add assert inside 

    public void create(D entity); // assert that id is null 
} 

마지막 단계는 방법 (옵션)를 저장하여 추가/교체 갱신 할 수 있습니다.

당신은 제네릭을 사용하고, D는 getId() 메소드가 어떤 인터페이스를 구현 할 수 있습니다, 이것은 부모로서, 코드 :

public interface Model implement Serializable{ 

    Long getId(); 

} 

을 줄일 수, 모든 DAO에 대해 하나 개의 클래스를 작성하는 데 도움이됩니다 youd가 DAO의 내부에, 당신은이를 작성합니다

public interface UserDAO <D extends Model>{ 
... 

을이 시점에서 당신이 당신의 GenericDaoImpl의 내부하는 모든 CRUD 작업을 구현할 수 있습니다. 그리고 UserDao와 같은 모든 DAO는 단순히 GenericDaoImpl을 확장 할 것이고, UserDao와 같은 Dao 인터페이스는 GenericDao 인터페이스를 확장 할 것입니다.

일반 클래스 내에서 일반적인 로직을 숨기고 이메일, 사용자 이름 또는 나이별로 사용자를 가져 오는 것과 같이 특정 Dao에만 특정 메소드를 추가합니다. :) 코드가보다 깨끗하고 읽기 쉽습니다.

+0

재미있는 ..

getUserByEmail(String email){} 

당신은 또한 기능의 이러한 유형을 추가 할 수 있으므로 인터페이스는 프로젝트에서 사용자의 모든 종류에 액세스하는 데 사용할 수 있습니다 또한 당신은 같은 당신의 필요에 따라 더 CRUD 기능을 추가 할 수 있습니다 . 엔티티의 Collection을 가져 오기 위해 getList 메소드와 같은 메소드를 추가해야합니까? – user3663882

+0

API를 만들 때 모든 사용자를 나열 할 수있는 목록보기가 있어야하므로 매우 일반적입니다. 편집을 위해서 당신은 get (id) 메쏘드 등을 사용합니다. – Beri

+1

저는 (generics와 함께)이 패턴을 사용했고 제 DAO 클래스는 generic 메인 클래스를 확장하기 때문에 코드 중복이 거의 없습니다. – Beri

1

기본적으로 DAO 계층 CRUD (작성, 읽기, 업데이트, 삭제) 작업과 관련된 기능을 포함합니다. 인터페이스에는 대부분 이러한 기능 만 포함되어 있으므로 인터페이스는 사용할 수 있습니다. 제네릭을 원하면 다른 대답도 좋습니다.

관련 문제