У меня есть класс Java, который извлекает данные из CMS Drupal. В конечном итоге в Drupal будет довольно много типов контента, которые мне нужно будет использовать в Java и кеше. Из-за того, как работает Drupal, каждый тип контента является отдельным представлением базы данных.Общий метод базы данных
У меня есть следующий метод, который вызывается сервисным слоем и возвращает определенный тип объекта. Однако мой страх - это распространение этих методов для каждого типа контента.
Может кто-нибудь предложить способ сделать его более общим? Метод базы данных показан во втором примере кода. Я не знаю, могу ли я сделать это родовым тоже, и если это того стоит. Может быть, я могу вызвать один метод в первом методе и использовать второй метод case.
public DeliverySchedule getDeliverySchedule(final String cmsKey) { // <---- make return type (Del Schedule) generic
String cacheKey = TYPEDS + cmsKey;
DeliverySchedule cmsInstance = CMSObjectCache.getCachedCMSObject(cacheKey, DeliverySchedule.class); // Make generic
// Object not found in cache, go to database.
if (cmsInstance == null) {
try {
cmsInstance = getDeliveryScheduleFromDB(cmsKey); // <---- How can I make this generic so I can avoid DRY?
CMSObjectCache.putCachedCMSObject(cacheKey, new CMSObject(DeliverySchedule.class, cmsInstance));
return cmsInstance;
} catch (EmptyResultDataAccessException e) {
return null;
}
} else {
return cmsInstance;
}
}
Метод доступа к базе данных, специфичные для типа содержимого выше:
// Called from above
private List<DeliverySchedule> getDeliverySchedulesFromDB() {
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
final String sql = "select * "
+ " from cmsutil.delivery_schedules as m "
+ " where m.effdate = (select max(mm.effdate) "
+ " from cmsutil.delivery_schedules as mm "
+ " where mm.cms_key = m.cms_key "
+ " and mm.effdate <= current_date)";
List<DeliverySchedule> listcmsObject = jdbcTemplate.query(sql, new DeliveryScheduleMapper());
return jdbcTemplate.query(sql, new DeliveryScheduleMapper());
}