我在考慮使用依賴注入來實現Objectify DAO,這樣我就可以維護我的代碼以訪問相同的「Dao」,而實現可能在將來從Objectify改爲Hibernate-MySQL或MongoDb時不需要我擔心在UI或客戶端更改任何代碼。使用Spring實現DAO
userDAO的是基於這裏的例子: http://turbomanage.wordpress.com/2010/01/28/simplify-with-objectify/
UserObjectifyDaoImpl implements Dao<User> {
private UserDao dao = null;
public void put(User entity) {
if (dao == null) {
dao = new UserDao();
}
dao.put(entity);
}
// other put and set methods
}
這樣,我有context.xml
:
<bean id="userDao" class="com.example.server.daoimpl.UserObjectifyDaoImpl">
<property name="dataSource" ref="dataSource"/>
</bean>
如果我需要改變的實施,我只需要改變這個豆從UserObjectifyDaoImpl
類似於:
UserHibernateDaoImpl
或UserMongoDBDaoImpl
或任何實施保存到任何數據庫。
而且仍然有我在UI /客戶端代碼完好無損,如:
WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(getServletContext());
Dao dao = (Dao) ctx.getBean("userDao");
dao.put(something);
一個原因,我現在需要做的這個權利,我需要使用的應用程序引擎(通過客觀化)發展,但是在未來,我可能需要將某些數據訪問對象更改爲休眠狀態,並將某些數據訪問對象更改爲mongodb(因此它是混合)。
我還沒有測試過這個代碼,這個策略會工作嗎?
它會工作。你是righ,spring-data是好方法,但只適用於sql。spring-data-mongodb現在無法使用其他數據源https://jira.springsource.org/browse/DATAMONGO-389,https://jira.springsource.org/browse/DATAJPA-146 – iddqd 2012-02-09 12:13:42
@iddqd:Nice ..但我相信OP希望完全從一個實現切換到另一個,而不是同時使用它們。 – 2012-02-09 12:15:45
「我現在需要這樣做的一個原因是,我需要開發使用應用程序引擎(通過objectify),但是在將來我可能需要將某些數據訪問對象更改爲休眠模式,以及將某些數據訪問對象更改爲mongodb。 「 – iddqd 2012-02-09 12:17:01