我有一个从 Drupal CMS 检索数据的 Java 类。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());
}