簡體   English   中英

DAO和依賴注入,建議?

[英]DAO and dependency injection, advice?

這是我第一次使用DAO模式。 從我到目前為止所讀到的 ,實現這種模式將幫助我從任何持久性實現中分離我的調用代碼(控制器) - 正是我想要的; 也就是說,我不想被重新使用任何特定的數據庫或第三方庫。

我正在使用MongoDB和morphia(作為示例)創建一些測試代碼(以TDD方式),並使用morphia提供的BasicDAO類。

據我所知,擴展BasicDAO<T, V>需要一個接受Morphia和Mongo對象的構造函數; 這些是非常具體的(第三方)類型,我真的不想在DAO類本身之外浮動。

我怎樣才能擁有更多可插拔架構? 我的意思是,我應該考慮如何配置我的應用程序以使用具有特定配置參數的特定DAO,在實際源外部?

“可插拔”DAO層通常/總是基於接口DAO。 例如,讓我們考慮一個非常通用的簡單方法:

public interface GenericDAO <T, K extends Serializable> {  
    List<T> getAll(Class<T> typeClass);   
    T findByKey(Class<T> typeClass, K id);  
    void update(T object);  
    void remove(T object);  
    void insert(T object);  
}

(這是你在Morphia的通用DAO中所擁有的

然后,您可以開發不同的幾個通用DAO實現,您可以在其中找到不同的字段(反映在構造函數參數,setter和getter等)。 我們假設一個基於JDBC的:

public class GenericDAOJDBCImpl<T, K extends Serializable> implements GenericDAO<T, K extends Serializable> {
    private String db_url;

    private Connection;
    private PreparedStatement insert;
    // etc.
}

一旦實現了通用DAO(對於具體的數據存儲區),獲得具體的DAO將是沒有道理的:

public interface PersonDAO extends GenericDAO<Person, Long> {

}

public class PersonDAOJDBCImpl extends GenericDAOJDBCImpl<Person, Long> implements PersonDAO {

}

(順便說一下,你在Morphia的BasicDAO中所擁有的是MongoDB的通用DAO的實現)。

可插拔架構中的第二件事是選擇具體的DAO實現。 我建議你閱讀Apress的第2章:Pro Spring 2.5 (“將春天放入”Hello World“)以逐步了解工廠和依賴注入。

Spring使用配置為您做DI,並且它被廣泛使用。

嗨,我不是java的專家。 但試圖給出一個解決方案。

你可以有一個超類,其中發生所有連接相關的東西,以及你可以擴展和使用它的任何其他基類。

之后,您的數據庫中的任何開關都可以為特定的第三方驅動程序重寫超類。

我再也不是專家。 試着在這里學習。 :)

一對標准的DI框架是Spring和Guice。 這兩個框架都有助於TDD。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM