Drupal CMS からデータを取得する Java クラスがあります。最終的に Drupal には、Java に取り込んでキャッシュする必要があるかなりの数のコンテンツ タイプが存在することになります。Drupal の動作方法により、各コンテンツ タイプは個別のデータベース ビューになります。
サービスレイヤーによって呼び出される次のメソッドがあり、特定のオブジェクトタイプを返します。しかし、私が恐れているのは、コンテンツ タイプごとにこれらのメソッドが急増していることです。
誰かがそれをより一般的にする方法を提案できますか? データベース メソッドは、2 番目のコード サンプルに示されています。私もそれをジェネリックにできるかどうか、そしてそれが価値があるかどうかはわかりません。たぶん、最初のメソッドで 1 つのメソッドを呼び出し、2 番目のメソッドで 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());
}