[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 相關技術也都有著墨一些, 個人喜歡分享自己在開發上的經驗,所以會把碰到的問題分享在部落格上, 有問題也歡迎聯絡我喔!

「[Asp .Net MVC] ViewMode vs DTO(Data Transfer Object)」有一則迴響

  1. I enjoy what you guys are up too. This type of clever work and coverage!
    Keep up the awesome works guys I’ve incorporated you guys
    to my own blogroll.

發表迴響

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