4

只是 Java/Hibernate/Spring/Mysql 堆栈中的架构问题

我应该在服务层中使用 OpenSessionInView 模式还是使用 DTO 对象来应对延迟加载异常。

从服务层返回域/实体对象是一种好习惯吗?还是返回 DTO 对象是一种好习惯,这些对象稍后会在 Web 服务层中序列化为 xml/json。

4

2 回答 2

1

我遵循一个非常简单的规则:

DTO 或多或少是从一个域到另一个域的转换。这意味着我仅在两层之间有物理分离时才使用 DTO。

这意味着如果您有 JSP,您可以使用 OpenSessionInView 模式来避免翻译模型等的大量过度工作。

于 2012-05-25T13:58:05.747 回答
0

由于视图反模式中打开会话的不可预测的性能影响,我将始终使用 DTO 方法。

我为该用例创建了Blaze-Persistence 实体视图。您基本上将 JPA 实体的 DTO 定义为接口并将它们应用于查询。它支持映射嵌套的 DTO、集合等,基本上是您所期望的一切,最重要的是,它将提高您的查询性能,因为它会生成仅获取 DTO 实际需要的数据的查询。

您的示例的实体视图可能如下所示

@EntityView(Person.class)
interface PersonDto {
  String getName();
}

查询可能看起来像这样

List<PersonDto> dtos = entityViewManager.applySetting(
  EntityViewSetting.create(PersonDto.class),
  criteriaBuilderFactory.create(em, Person.class)
).getResultList();
于 2018-07-19T18:41:56.693 回答