我正在開發一個使用SpringMVC,JPA2的簡單論壇Web應用程序。 我創建了像用戶,論壇,發佈等反映數據庫表結構的JPA實體。DTOs更好的方法?
但同時顯示UI上的數據,我需要一些DTOs,我不能總是抱着要顯示在使用實體UI中的數據。
例如:更改密碼畫面。在這裏我需要保留舊密碼,新密碼和確認新密碼。但用戶實體不會有舊/新/確認密碼字段,它只是密碼。所以我需要創建DTO,它們只是Web和服務層之間的數據載體。
我的問題是在創建DTO的對象,應該我把所有的DTO本身或包裝在DTO實體,並添加額外的屬性所需要的屬性?
例:對於編輯用戶界面,
public class UserDTO
{
private User user; // User is a JPA entity
// setters & getters
}
有了這個,我可以通過底層的用戶實體到我的業務層。但在綁定UI屬性到DTO時,我需要關聯PropertyEditor。
(或)
public class UserDTO
{
private String userId;
private String userName;
private String password;
// setters & getters
}
用這種方法,我需要轉換&複製DTO的屬性分爲JPA實體,並傳遞給服務層。
哪種方法更好?還是有沒有其他方法完全沒有DTO?
但對於像更改密碼屏幕或後的屏幕顯示列表中的場景與一些聚集results..here我們需要DTOs..right對象? – 2012-07-31 05:43:25
爲什麼?如果您只需要實體中的一部分數據(您已從數據庫中提取數據),那麼使用整個實體不會有任何額外開銷。如果您還需要其他實體,則可以加載它們並將它們攜帶到表示層。 – 2012-07-31 05:56:22
對於DataGrid,我必須顯示1到25條記錄(實體),保留當前頁面的內容,總共有多少頁面等等。而不是將所有這些細節存儲爲請求(不管)範圍中的單個參數,我認爲將它們存儲在DTO中會更好。 – 2012-07-31 06:01:11