2011-09-06 92 views
3

在我们的应用程序中使用hibernate,并且喜欢使用DAO模式来实现应用程序的数据层。我看到的使用ValueObjects/DTO的从DAO的使用休眠时的DAO模式

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

返回数据是什么返回ValueObjects/DTO的,而不是返回休眠域对象作为

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

的优势,提出了一些建议这难道不是一个矫枉过正将数据从hibernate对象复制到value对象,并在内存中有两份相同的数据。 ValueObjects真的添加了什么优势?

只是优选的业务和视图层之间ValueObjects是应这些DAO中使用

感谢您的任何建议

希瓦

回答

1

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

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

@downvoter:小心解释你的downvote? –

1

使用的DTO的主要优点是,本申请的另一个层不能修改实际的模型对象,并因此更改您的数据。你这样做是为了保持你的数据的完整性和安全性。考虑到这一点,如果您对谁可以修改数据的方式有严格的要求,这可能是值得的。

如果你没有这样的要求,你当然可以返回模型实例。只要小心不要在不想要的时候改变这些模型。