我是否应该将实体转换为存储库对象内的 DTO 并将其返回到服务层?
我试图在这里得到两个非常相似问题的答案:
我是否应该将实体转换为存储库对象内的 DTO 并将其返回到服务层?
或
是否可以从存储库层返回 DTO 对象?
现在我被困在我的Servlet(Servie Layer)中,例如,尝试从中检索所有对象:Restaurant
RestaurantOwnerRepository
// RestaurantOwnerService (Servlet)
@Override
@Transactional
public List<RestaurantDTO> getAvailableRestaurants() {
List<Restaurant> availableRestaurants = restaurantOwnerRepository.getRestaurants(getSessionId());
return null;
}
哪里是一个带注释的类 - 这似乎是我不应该做的第一件事,因为服务层现在确实知道一个非常低级的对象,恕我直言,这违反了在每个层中抽象我的数据的尝试。Restaurant
@Entity
例如,如果我将每个转换为a,情况就不会是这样 - 但是我应该这样做吗?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