2010-05-21 27 views
3

我目前正在研究一個ASP.NET MVC2項目。這是我第一次在真正的MVC Web應用程序上工作。 ASP.NET MVC website確實幫助我快速入門,但我仍然對數據模型驗證有一些模糊的認識。在ASP.NET MVC中將複雜數據驗證的數據管理規則放在哪裏?

我的問題是,當涉及到複雜的驗證規則時,我不知道在哪裏管理填充的數據模型。例如,使用正則表達式驗證字符串字段非常簡單,我知道我只需要用特定的屬性修飾字段,因此數據管理規則在模型中實現。但是,如果我有多個字段需要驗證哪一個,例如需要根據特定時間規則正確設置的多個日期時間,那麼我需要在哪裏驗證它們?我知道我可以創建自己的驗證屬性,但有時候驗證會問一個特定的驗證路徑,這個驗證路徑很複雜,可以使用屬性進行驗證。

這個第一個問題也引出了一個相關的問題,那就是,在控制器中驗證模型是否正確?因爲目前這是我發現的複雜驗證的唯一途徑。但是我覺得這有點髒,我覺得它並不適合控制器的角色,也很難測試(多代碼路徑)。

謝謝。

NB:我得到了一些不錯的解決方案,在這裏,但我在等待其他的想法和一些「最佳實踐」解決方案」

+0

我問自己同樣的問題。試圖儘可能「幹」,我應該怎麼做簡單的驗證(要求,格式等)?我應該使用DataAnnotation在視圖中執行它,並在業務層中重做相同的驗證(加上更復雜的驗證)? – 2010-05-21 12:37:55

回答

4

Mega Dupe。超級主觀。「在哪裏以及如何驗證MVC」的論點已經被打死而沒有提出直接的答案。對每個開發者/商店來說,這是非常主觀和哲學的,因此每個人都幾乎不可能就任何事情達成一致。

另一個問題是即使驗證工具出現在一堆形狀和大小中,並且可以在不同的範圍和層中運行。它幾乎是瘋狂的驗證工具品種。如果(someString!=「」)變得如此難以如何? ;)

如果您閱讀了其他答案,您很快就會發現沒有最佳實踐。一旦你進入領域驅動的設計原則和對無效狀態和對象的討論,你會發現討論變得更加複雜。

Where do you do your validation? model, controller or view

ASP.NET MVC 2 validation using DTOs instead of domain entities

Does ASP.Net MVC 2 validation need some more thought in terms of patterns and use?

Mapping Validation Attributes From Domain Entity to DTO

Which validation library for ASP.NET MVC?

ASP.NET MVC - User Input and Service/Repository - Where to do Validation?

ASP.NET MVC: Is Data Annotation Validation Enough?

MVC - where to implement form validation (server-side)?

Asp.Net MVC Validation

DDD:

Validation in a Domain Driven Design

+0

這聽起來有點生氣,但鏈接到良好的信息....不錯的工作? – R0MANARMY 2010-05-21 17:56:25

+1

@ R0MANARMY我知道了很多;我怎麼總聽起來很生氣?我真的不是。 :( – jfar 2010-05-21 18:13:07

+1

我只是在開玩笑,不要過於個人化 – R0MANARMY 2010-05-21 19:01:40

2

我個人的意見是保留的觀點儘可能乾淨,並嘗試和力視圖只顯示數據(保持一樣傻乎乎的可能視圖)。

當然,你可以在視圖,如要求,正則表達式規則等做一些簡單的驗證。

複雜的業務規則應該坐下在一個商業實體或一些業務邏輯層內部。

我在MVC項目中做的事情是讓模型調用諸如Validate()這樣的方法來檢查最終的驗證級別,比如業務規則等,然後我可以調用Save();

+0

我相信我可以很容易地擴展我的部分LinqToSql模型的部分類。謝謝。 – Ucodia 2010-05-21 12:52:43

1

一旦你有一個可以被驗證的填充類,只需將它傳遞給控制器​​中的驗證類即可。

+0

我非常喜歡這個想法。它記住了默認帳戶控制器中使用的設計。 – Ucodia 2010-05-21 12:40:40