Должен ли я преобразовать объект в 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 на сервере и на стороне клиента, так как он содержится внутриобщий проект.

Ответы на вопрос(1)

Ваш ответ на вопрос