최대 절전 모드 나 절약 모드와 관련이 없습니다.최대 절전 모드와 절약 모드 간 변환
나는 Hibernate를 통해 데이터베이스로부터 데이터를 가져오고 아파치 절약 서비스를 통해 그 객체들을 제공하고자하는 자바 애플리케이션을 개발 중이다. 지금까지는 몇 가지 모델 만 가지고 있었지만 각 모델에 대해 최대 절전 개체 목록을 반복하고 절약 개체 목록을 구성해야했습니다.
예를 들어, (이 중고품 수집을 같이 수집을 최대 절전 모드 소요 반환 중고품 서비스 핸들러입니다) 코드의 조각을 다음 사항을 고려 :
@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
-이 최대 절전 모드 주석 클래스와 TOutcome
있습니다 , TIncome
- 관련된 서리 개체 (필드의 80-90 %를 공유 함)입니다.
이 코드는 매우 유사하기 때문에 "DRY"원칙이 위반되었습니다. 최대 절전 모드 개체를 반복하고 절약 개체를 반환하는 일반적인 방법을 제공하고 싶습니다. 제네릭과 디자인 패턴을 생각하고있었습니다.
동적 언어에서는 문자열을 사용하여 클래스 이름을 만들고 개체를 구성 할 수 있습니다 (유형 검사 없음). 제네릭을 사용하여 Java에서 비슷한 기능을 수행 할 수있는 가능성이 있다고 생각하지만 어디에서 시작해야할지 모르겠습니다.
결과 및 소득 공통 데이터에 대해 하나의 클래스를 사용하도록 코드를 리팩토링 할 수 있습니까? 상속 또는 믹싱을 사용할 수 있습니다. – kan
@kan 쉽지 않습니다. [1] 저축에는 상속이없고 [2] 다른 모델은 서로 유사하지 않습니다 (사용자, 카테고리 및 결과 - 거의 공통점이 없지만 반복 항목은 동일합니다). – ducin
Java Reflection을 사용하여 필드에 같은 이름 또는 일치하는 요소가 있다고 가정하면 혼성을 디자인 할 수 있지만 @ kan의 제안이 도움이 될 것 같습니다. –