REST 서비스를 제공하는 Java EE 앱을 개발했습니다. POJO를 사용하여 데이터를 전송하는 기본 엔티티를 노출시키지 않기로 결정했습니다. 사용자가 목록을 요청하면 앱은 최소한의 정보로 POJO 목록을 전송하지만 사용자가 특정 리소스를 요청하면 POJO가 더 자세하게 표시됩니다. 예를 들어, 나는 Car
실체가 상상 , 나는이있을 수 있습니다 :클래스 T의 객체의 속성을 만들고 채우거나 중복 코드없이 T에서 확장했습니다.
public class BaseCar {
private String model;
private int year;
// [...getters and setters...]
}
이 :
public class FullCar extends BaseCar {
private String color;
private int maxSpeed;
private List<String> comments;
// [...getters and setters...]
}
을 따라서 사용자의 통화/자동차 그가 BaseCar
의 목록을 얻을 것이다 경우 만 그가/cars/10을 호출하면 그는 FullCar
을 얻습니다. 사실은 내가 BaseCar 및 FullCar를 만드는 두 가지 방법했습니다 :
public BaseCar toBaseCar(Car car) {
BaseCar baseCar = new BaseCar();
baseCar.setModel(car.getModel());
baseCar.setYear(car.getYear());
}
public FullCar toFullCar(Car car) {
FullCar fullCar = new FullCar();
fullCar.setModel(car.getModel());
fullCar.setYear(car.getYear());
fullCar.setColor(car.getColor());
fullCar.setMaxSpeed(car.getMaxSpeed());
fullCar.setComments(new ArrayList<String>());
for (Comment comment : car.getCommentsCollection()) {
fullCar.getComments().add(comment.getText());
}
}
,이 반복되는 것 코드 (이 예에만 setModel()
및 setYear()
에서, 그러나 보통은 더). 나는 이러한 반복을 피하기 위해 무엇을 할 수 있는지 알고
BaseCar baseCar = (baseCar) toFullCar(car);
을하지만 내가 그들을 사용하지 않을거야 경우 더 많은 메모리 또는 부하 컬렉션을 사용하지 않기 때문에, 그것을 할 싶지 않아 . 사실, 내가 무슨 소원이 같은 것입니다 :
public FullCar toFullCar(Car car) {
FullCar fullCar = toBaseCar(car);
fullCar.setColor(car.getColor());
fullCar.setMaxSpeed(car.getMaxSpeed());
fullCar.setComments(new ArrayList<String>());
for (Comment comment : car.getCommentsCollection()) {
fullCar.getComments().add(comment.getText());
}
}
그러나 BaseCar
에서 FullCar
에 캐스팅하는 것은 불가능합니다. 동일한 코드 블록을 반복하지 않도록하는 방법이 있습니까?
이 좋은 생각이고 나는 이미 그것에 대해 생각했다, 그러나 항상 나는 일이 있습니다 사이 1 관계를 엔티티 및 pojo와 나는 데이터 공유에만 사용하는 클래스에 논리를 두는 것이 확실하지 않습니다. 내 말은, 물론 할 수 있지만, 나는 그것을 좋아하지 않는다. –