2011-04-28 129 views
4

我將爲我的應用程序設計一個DAO層。我的重點是,服務只是調用獨立於實施的DAO。Generic Dao和服務層

public interface GenericSearchDao{ 
     List getAll(); 
     List getByQuery(String query); 
} 

public class UserJdbcSearch implements GenericSearchDao{ 

     public List getAll(){ 
       // Get all users; 
     } 

     List getByQuery(String query){ 
       // Get users by query; 
     } 

} 

public class UserFileSystemSearch implements GenericSearchDao{ 

     public List getAll(){ 
       // Get all users from file system; 
     } 


     List getByQuery(String query){ 
       // Get users by query[this leads to invalid operation]; 
     } 
} 

public userService { 

     private GenericSearchDao dao = new UserFileSystemSearch(); 

     public List getUsers(){ 
       rturn dao.getAll(); 
     } 

     public List getByQuery(String query){ 
       return dao.getByQuery(query); 
     } 
} 

幫助要求:

我應該做的就是從'getByQuery(查詢)的具體implementaions去掉,因爲數據存儲可以是RDBMS,文件系統,FTP等

我應該如何一般設計我的Dao層?

如果任何一個人說,「從GenericSearchDao刪除getByQuery()」,那麼我應該在的情況下做的,我需要具體到經營數據如:與角色,與產品等用戶用戶..

+0

Copypaste bug! 'Stirng'。 – BalusC 2011-04-28 21:40:41

+0

謝謝,糾正 – Zeeshan 2011-04-28 21:45:58

回答

0

嘿,檢查這個網站DAO Implementation。有一些DAO實現具有不同的設計模式。我認爲帶有Abstact工廠的DAO將適合您。

+0

是的,但在這種情況下的問題是目前我有一個道及其impl,但在未來,我可以有30道和其30個IMPL的......我需要最小化或殺死這個重複也需要解耦服務與DAO及其底層實現。 – Zeeshan 2011-04-28 21:45:07

+0

看看http://codeblock.engio.net/?p=180。我提出的解決方案使用不同存儲技術的技術不可知實現作爲特定於域的DAO的基礎機制。 – bennidi 2014-02-06 09:12:19

0

我應該做的就是從'getByQuery(查詢)的具體implementaions去掉,因爲數據存儲可以是RDBMS,文件系統,FTP等

你不這樣做,你只需要提供「通用」查詢,例如「name = a」可以在數據庫中執行查詢,或查找名爲「a」的文件或其他任何東西。

+0

先生,難道你不認爲這會導致一個小的查詢語言,我將爲每個基礎implementationaion開發:) – Zeeshan 2011-04-28 21:48:32

0

你打算在「查詢」參數中傳遞什麼信息? SQL?我將String參數替換爲特定於業務的特定參數,也許是一個帶有「name」,「surname」等字段的小類。底層實現會將其轉換爲SQL或遠程服務調用或其他實現特定的魔法。

+0

我appriciate你的答案。你的答案會導致一個小的查詢語言,所以我可以根據底層實現來解釋它。但我不想發明這種查詢語言。我認爲有一個選擇,道模式,我應該認識到。感謝您的回覆 – Zeeshan 2011-04-29 22:09:21