2013-01-18 48 views
3

DAO類負責處理以下所有方法嗎?或者將一些方法排除在服務層上更好?DAO只負責CRUD操作?

我發現這個接口here。我想在我的代碼中重複這個接口..

public interface GeneralDAO { 

     public <T> T find(Class<T> type, Serializable id); 

     public <T> T[] find(Class<T> type, Serializable... ids); 

     public <T> T getReference(Class<T> type, Serializable id); 

     public <T> T[] getReferences(Class<T> type, Serializable... ids); 

     public boolean save(Object entity); 

     public boolean[] save(Object... entities); 

     public boolean remove(Object entity); 

     public void remove(Object... entities); 

     public boolean removeById(Class<?> type, Serializable id); 

     public void removeByIds(Class<?> type, Serializable... ids); 

     public <T> List<T> findAll(Class<T> type); 

     public List search(ISearch search); 

     public Object searchUnique(ISearch search); 

     public int count(ISearch search); 

     public SearchResult searchAndCount(ISearch search); 

     public boolean isAttached(Object entity); 

     public void refresh(Object... entities); 

     public void flush(); 

     public Filter getFilterFromExample(Object example); 

     public Filter getFilterFromExample(Object example, ExampleOptions options); 
} 

回答

4

您的GeneralDao中列出的所有方法都與DAO模式兼容。

此外,只要它們與從存儲中持久化/檢索有關,就可以擁有特定於您所使用實體的方法。 。例如CustomerDao:除了你的GeneralDao中的方法可能有方法通過與客戶有關的標準來找到。 。 。如果你能以一種特定的方式來呈現這些,從而產生更多的描述性代碼,那就更好。細節並沒有錯,並專注於一個實體。

(CustomerDao,OrderDao,ProductDao的,。PilotDao,BookDao,等等這些都可能有關於存儲和實體類型的檢索獨特的方法)

你會知道你」如果你可以將底層持久存儲換成別的東西,那麼仍然遵守DAO模式,並且DAO仍然有意義。

1

DAO s(數據訪問對象,因爲它們被稱爲)主要是爲了提供底層數據存儲的抽象,並隔離其他模塊免受底層DBMS和模式的困擾。只要你不使用DAO來保持業務邏輯或其他任何與數據訪問無關的東西,我認爲你是好的。