나는 Drupal CMS에서 데이터를 검색하는 Java 클래스가 있습니다. 결국 드루팔 (Drupal)에는 자바와 캐시에 필요한 많은 콘텐츠 유형이 있습니다. 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());
}