[Asp .Net MVC] ViewMode vs DTO(Data Transfer Object)

View Model 與 DTO 到底有何不同的時候,想用這篇文章解釋一下差異。

簡單來說View Model 是一個 POCO 物件,一個POCO 物件可以包含以下行為:

1.保留狀態(State)。

2.具有行為(資料驗證…)

最重要的就是具有行為,我們在做前端畫面時,很常透過Data Annotation 的方式,來驗證前端傳來的資料是否符合我們的定義,

_asp__net_mvc__viewmode_vs_dto_data_transfer_object____harry_s_tech_world_-_%e9%bb%9e%e9%83%a8%e8%90%bd

各位可以看到上面這個View Model ,UsrId 一定要必填、Email 格式一定要正確、申請日期預設帶今日,這些都是我們定義好的前端行為。

那DTO 又是什麼呢?

DTO(Data Trasfer Object)我認為翻成「資料乘載物件」較為合適,即這個物件只是一條船,這條船只負責幫我把貨物送到我們想要的地點,

但不會幫我們確認貨物是否違法、有無過期(因為這些工作是POCO 物件的工作)。


當然,有時我們沒有在View Model 做一些行為時,這時候View Model 就會跟 DTO 長得一模一樣,

這也是為何很多新人無法理解為何要將這兩樣東西區分開來(因為還要多維護好幾個檔案);

另外一個要區分的原因,是因為我們並不想把這些行為帶到商業邏輯層或是資料存取層來,

因為View 隨時都有可能變動,一變動我們一定會異動Model ,異動Model 近一步就會影響到我們的商業邏輯層跟資料存取層,這樣整個程式架構的耦合性就會變得很高!

另外一些分開的好處可以參考「[Asp .Net MVC] 淺談MVC系統架構

本文也發表於Harry’s Tech World

作者: Harry's Tech World

嗨,我是Harry,在叡揚資訊技術開發中心擔任程式分析師, 在公司負責產品開發並且協助解決同仁碰到的問題, 技術的部分主要專研 MVC、NHibernate 與 Spring ,.Net 相關技術也都有著墨一些, 個人喜歡分享自己在開發上的經驗,所以會把碰到的問題分享在部落格上, 有問題也歡迎聯絡我喔!

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *