2011-09-06 150 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的主要優點是,本申請的另一個層不能修改實際的模型對象,並因此更改您的數據。你這樣做是爲了保持你的數據的完整性和安全性。考慮到這一點,如果您對誰可以修改數據的方式有嚴格的要求,這可能是值得的。

如果你沒有這樣的要求,你當然可以返回模型實例。只要小心不要在不想要的時候改變這些模型。