Должен ли я преобразовать объект в DTO внутри объекта Repository и вернуть его на уровень обслуживания?
Я пытаюсь получить ответ на два довольно похожих вопроса здесь:
Должен ли я преобразовать объект в DTO внутри объекта Repository и вернуть его на уровень обслуживания?
или же
Можно ли возвращать объекты DTO из уровня репозитория?
Прямо сейчас я застрял в моем Сервлете (Servie Layer), который, например, пытается получить всеRestaurant
объекты изRestaurantOwnerRepository
:
// RestaurantOwnerService (Servlet)
@Override
@Transactional
public List<RestaurantDTO> getAvailableRestaurants() {
List<Restaurant> availableRestaurants = restaurantOwnerRepository.getRestaurants(getSessionId());
return null;
}
гдеRestaurant
это@Entity
аннотированный класс - который, по-видимому, является первым, что я не должен делать, потому что сервисный уровень теперь знает об объекте очень низкого уровня, который имхо нарушает попытку абстрагировать мои данные в каждом слое.
Это было бы не так, если бы я, например. преобразован каждыйRestaurant
кRestaurantDTO
- но я должен сделать это?
В основном изменить:
// RestaurantOwnerRepository
@Override
public List<Restaurant> getRestaurants(String sessionId) {
RestaurantOwner restaurantOwner = this.get(sessionId);
// .. getting restaurants ..
return availableRestaurants;
}
в
// RestaurantOwnerRepository
@Override
public List<Restaurant> getRestaurants(String sessionId) {
RestaurantOwner restaurantOwner = this.get(sessionId);
// .. getting restaurants ..
return ConvertEntity.convertRestaurants(availableRestaurants);
}
и есть утилитаConvertEntity
закаждый сущность как это например:
public class ConvertEntity {
public static List<RestaurantDTO> convertRestaurants(List<Restaurant> restaurants) {
// ...
}
}
но это просто не похоже на лучшее решение для меня .. что я мог сделать здесь?
Одна важная вещь, чтобы упомянуть было бы, что это приходит из проекта GWT. Это означает, что я использую, например,RestaurantDTO
на сервере и на стороне клиента, так как он содержится внутриобщий проект.