2010-04-08 94 views
5

我看到很多MVC示例,其中域對象直接傳遞到視圖,如果您的視圖很簡單,這將工作得很好。asp.net MVC應該視圖模型封裝域模型?

常見的選擇是擁有一個視圖模型,它具有與您的視圖模型+視圖可能需要的任何額外屬性(例如'confirmPassword')完全相同的屬性。

在做太多的閱讀和發現AutoMapper之前,我開始創建自己的視圖模型變體,其中域對象(或多個域對象)只是視圖模型的屬性。

我做了壞事嗎?這種方法會帶來哪些問題或好處? 在什麼情況下,這種做事方式可以正常工作?

+0

如果封裝了Domain-Model,那麼ViewModel的目的是什麼 – Omu 2010-05-05 19:04:28

+0

主要原因是聚合多個域模型,例如:Product,Basket,Navigation等 – Myster 2010-05-05 20:50:55

回答

4

將域模型直接暴露給視圖並沒有什麼固有的壞處。主要風險來自於暴露你不意味的屬性,例如Employee對象上的薪水字段。如果您要返回JSON,請務必小心。

另一件需要注意的事情是,當你從編輯表單綁定回來時。您應該瞭解涉及的具體risks。基本上,惡意用戶可以將字段添加到POST中,恰好匹配您不希望可編輯的字段。我總是綁定到傳遞到服務中的中間對象,然後將其映射回域。

+0

這隻適用於作用域對象參數;把它們傳遞給視圖沒有什麼不安全感。 – queen3 2010-04-08 11:34:53

+0

@queen有兩個不同的問題。傳出:通過JSON/XML /無論是暴露敏感字段。傳入:惡意表單參數。 – Ryan 2010-04-08 21:43:32

+0

我記得有人提倡viewModel是作爲回發的Action參數的SAME類型。看來這種方法意味着你必須完全分離你的域模型。 (除非它打算完全開放以進行修改) – Myster 2010-04-11 23:13:25

0

不好?無法使用Automapper。 ;)

好嗎?沒有什麼可以想到的。

我不認爲你做過任何可怕的事情。對你起作用嗎?如果是這樣,爲什麼不呢?