java - 使用 hibernate 时的 DAO 模式

标签 java hibernate design-patterns dao dto

我们在应用程序中使用hibernate,喜欢使用DAO 模式来实现应用程序的数据层。我看到了一些关于使用 ValueObjects/DTO 从 DAO 返回数据的建议

public interface EmployeeDAO {
  List<EmployeeDTO> getEmployees();
}

返回 ValueObjects/DTO 而不是返回 hibernate 域对象的优势是什么

public interface EmployeeDAO {
  List<Employee> getEmployees();
}

将数据从 hibernate 对象复制到值对象并在内存中拥有相同数据的两个副本,这不是矫枉过正吗? ValueObjects 真正增加了什么优势?

ValueObjects 是否只是业务层和 View 层之间的首选,是否应该在 DAO 中使用它们

谢谢你的建议

湿婆

最佳答案

通常应避免使用 DTO。不过,它们在某些情况下可能很有用:

  • 不是返回整个对象图,而是返回仅包含有趣信息的临时 DTO。这使代码更加自文档化。否则,尤其是当返回的实体被分离时,很难知道哪些关联已加载,哪些没有。
  • 当您必须返回不返回实体实例(聚合等)的查询结果时
  • 当由于技术原因(无法访问 Hibernate 库等)无法在客户端使用 Hibernate 实体时。尽管在这种情况下,将实体转换为 DTO 的角色可能是外观层的角色,而不是 DAO 的角色。

关于java - 使用 hibernate 时的 DAO 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7320636/

相关文章:

按钮的 JavaFX 条件 CSS 样式

java - 将泛型与实现相同接口(interface)的枚举类集合一起使用

.net - 工厂类属于哪个命名空间?

java - Guice @Singleton 必须遵循 Singleton 设计模式吗?

java - Hibernate 4.0.0Final SessionFactory.openSession(拦截器拦截器)在哪里

php - 让 PHP Storm 识别单例类

Android 应用程序上的 Java 套接字异常,需要帮助吗?

java - 在 Activity 中使用 google 登录后保存 google 个人资料

java - 如何存储使用 hibernate 命令的 ArrayList?

java - 单个实体的 Postgres UPDATE 导致 CPU 使用率高