Я думаю о реализации Objectify DAO с внедрением зависимостей, чтобы я мог поддерживать свой код для доступа к тому же «Dao», в то время как реализация может измениться с Objectify на Hibernate-MySQL или MongoDb в будущем, не беспокоясь об изменении любой код в пользовательском интерфейсе или на стороне клиента.
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
или любая другая реализация, сохраняемая в любой базе данных.
И все же мой код в пользовательском интерфейсе / клиенте остается неизменным, например:
WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(getServletContext());
Dao dao = (Dao) ctx.getBean("userDao");
dao.put(something);
Одна из причин, по которой мне нужно сделать это прямо сейчас, - мне нужно разрабатывать с использованием движка приложений (через objectify), однако в будущем мне может понадобиться изменить некоторые объекты доступа к данным на hibernate, а некоторые на mongodb (так что это микс) ,
Я не тестировал этот код, будет ли работать эта стратегия?