我正在考虑使用依赖注入实现 Objectify DAO,这样我就可以维护我的代码以访问相同的“Dao”,而将来实现可能会从 Objectify 更改为 Hibernate-MySQL 或 MongoDb,而无需担心更改任何代码UI 或客户端。
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>
如果我需要更改实现,我只需要将这个 bean 从更改UserObjectifyDaoImpl
为:
UserHibernateDaoImpl
或UserMongoDBDaoImpl
或任何实现保存到任何数据库。
并且我的 UI / 客户端中的代码仍然完好无损,例如:
WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(getServletContext());
Dao dao = (Dao) ctx.getBean("userDao");
dao.put(something);
我现在需要这样做的一个原因是,我需要使用应用程序引擎(通过 objectify)进行开发,但是将来我可能需要将一些数据访问对象更改为 hibernate,一些更改为 mongodb(所以它是混合的)。
我还没有测试过这段代码,这个策略会起作用吗?