使用休眠时的DAO模式

时间:2011-09-06 13:23:42

标签: 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对象复制到value对象并在内存中有两个相同数据的副本是不是太过分了。 ValueObjects真正添加了什么优势?

在业务视图层和视图层之间是否首选ValueObjects是否应在DAO中使用

感谢您的任何建议

希瓦

2 个答案:

答案 0 :(得分:1)

使用DTO的主要优点是应用程序的另一层无法修改实际的模型对象,因此会更改您的数据。您这样做是为了保持数据的完整性和安全性。考虑到这一点,如果您对数据的修改方式有何严格要求,那么它是值得的。

如果您没有此类要求,您当然可以返回模型实例。当你不想要时,小心不要改变那些模型。

答案 1 :(得分:1)

通常应避免使用DTO。但它们在某些情况下很有用:

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