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