这既与hibernate无关,也与thrift本身无关。
我正在开发一个 Java 应用程序,我通过 Hibernate 从数据库中获取数据,并希望通过 apache thrift 服务为这些对象提供服务。到目前为止,我只有几个模型,但对于每个模型,我都必须遍历休眠对象列表并构造节俭对象列表。
例如,考虑以下代码片段(这是 thrift 服务处理程序,它将 hibernate 集合作为 IN 并返回 thrift 集合):
@Override
public List<TOutcome> getUserOutcomes(int user_id) throws TException {
List<Outcome> outcomes = this.dataProvider.getOutcomesByUserId(user_id);
List<TOutcome> result = new ArrayList<>();
for (Iterator iterator = outcomes.iterator(); iterator.hasNext();) {
Outcome outcome = (Outcome) iterator.next();
TOutcome t_outcome = new TOutcome(
(double) (Math.round(outcome.getAmount() * 100)) / 100,
outcome.getUser().getName(),
String.valueOf(outcome.getCategory().getName()));
t_outcome.setComment(outcome.getComment());
result.add(t_outcome);
}
return result;
}
@Override
public List<TIncome> getUserIncomes(int user_id) throws TException {
List<Income> incomes = this.dataProvider.getIncomesByUserId(user_id);
List<TIncome> result = new ArrayList<>();
for (Iterator iterator = incomes.iterator(); iterator.hasNext();) {
Income income = (Income) iterator.next();
TIncome t_income = new TIncome(
(double) (Math.round(income.getAmount() * 100)) / 100,
income.getUser().getName(),
String.valueOf(income.getCategory().getName()));
t_income.setComment(income.getComment());
result.add(t_income);
}
return result;
}
Outcome
, Income
- 这些是 Hibernate 注释类,并且TOutcome
, TIncome
- 是相关的 thrift 对象(共享 80-90% 的字段)。
现在违反了“DRY”原则,因为这段代码非常非常相似。我想提供一种通用方法来迭代休眠对象并返回节俭对象。我在考虑泛型和设计模式。
在动态语言中,我可以只使用字符串来构建类名和构造对象(没有类型检查)。我想有可能在 Java 中使用泛型做类似的事情,但我不确定我应该从哪里开始。