我正在爲一個類項目製作一個C#應用程序。我想確保一個字符串有三個值之一。通常,在Web應用程序中,我會在客戶端使用JavaScript進行驗證。但是,這是目前的控制檯應用程序。我知道我應該儘早進行驗證,但驗證有什麼好的經驗規則?應用程序的最佳位置在哪裏進行驗證?經驗法則?
回答
每個模塊都應該進行自己的驗證,並且永遠不要相信調用代碼給出的內容。這通常意味着驗證應該發生在應用程序的每一層。您尤其不希望在客戶端發生任何驗證,因爲這可能會導致安全漏洞。已知客戶端上運行的代碼會不時發生變化。
根據應用程序的進展情況,您可以在離開該頁面/步驟之前進行驗證(如果它像一個嚮導,可以逐步瀏覽多個頁面/步驟),也可以在用戶離開該文本框後立即生效/值。另一個選項是修改時的驗證。
作爲一個經驗法則,如你所說,你應該儘可能早地驗證,但在客戶端 - 服務器應用程序,它儘快驗證服務器上的數據,以防止可能出現的安全問題是非常重要的。
我喜歡在用戶點擊Ok或Next之後驗證 - 在他們離開他們所在的屏幕之前。在修改過程中驗證很少有效 - 用戶必須能夠退格,在輸入字符串時插入字符串,並且複製/粘貼到字符串字段有它自己的問題。如果字符串顯示爲紅色,直到它是有效的,這可能會有所幫助,但是您仍然必須防止繼續進行,直到它得到糾正。同樣,對於離開文本框,在進行數據輸入時顯示消息框可能會很刺激。等到用戶說完成完成,並立即進行所有驗證。
我認爲你應該驗證三次。
- 在客戶端,2在服務器和3在數據庫中的檢查約束。
在控制檯應用程序中,您可以立即驗證,因爲您知道用戶將按什麼順序輸入數據。
如果你正在做MVC,機會是你從地上爬起來使用TDD工作。
我不知道這是否是最好的方式,但我做事的方式是..
- 讓我的業務對象。
- 定義某種驗證框架,因此業務對象可以返回當前狀態的錯誤列表並使用單元測試來測試這些錯誤。
- 如果您使用LINQ to SQL中,實現分部方法的OnValidate(),並使它所以它要求你的mybusinessobject.geterrors()。 OnValidate在您執行db時會被調用。提交更改()以便您可以停止保存無效數據
- 現在,在您的控制器中,當有人創建新的業務對象或編輯一個對象時,請使用從用戶獲得的任何數據創建對象 - 然後調用您的geterrors()方法,做任何
- 然後客戶端驗證,如果你可以arsed
這是這裏所描述斯科特·格思裏的框架:http://weblogs.asp.net/scottgu/archive/2008/09/02/asp-net-mvc-preview-5-and-form-posting-scenarios.aspx
我喜歡它,它意味着你可以一次定義業務規則並在不同的層次上重複使用它們,這意味着它不太可能會錯過它們當你更新東西時的一個特定區域
關於一般最佳實踐有很多很好的答案......但是你的問題指定了「MVC」,並且只有一個正確的答案。
編輯:你的「問題」沒有說MVC,但你的標籤沒有。
MVC =模型視圖控制器
所有的業務邏輯是在控制器中。這是的答案。
在這篇文章中的其他答案是偉大的提示,如「不信任客戶端驗證」......和「無處不在驗證」。
另一個提示:如果您可以在元信息中定義您的驗證規則,那麼所有驗證邏輯都可以解釋的情況下,驗證無處不在。然後,您只需要在一個地方定義規則,而不必擔心客戶端驗證,服務器端驗證和測試用例彼此不同步。
我喜歡Timothy's picking up on MVC。
由於我們對應用程序的性質瞭解很少,所以我想指出一些非常一般的經驗法則以及已經提供的良好建議。
驗證的方式,
不可逆的動作與無效輸入
執行的用戶不會失去工作
用戶的活動從來沒有把的狀態下錯誤的輸入不容易識別並且簡單地收回
應用程序w生病在一個糟糕的狀態不是失敗或崩潰
無(共同)持續的材料離開過(或見到)作爲無效數據
一個用戶的應用程序的處理結果是不是沮喪在完成其有用作爲驗證完成的方式和時間的結果
這應該是很好的掩蓋它。
- 1. 哪裏是定義字段驗證的最佳位置?
- 2. 哪裏是驗證表單數據的最佳位置?
- 3. 鑑於此應用程序設計,放置驗證邏輯的最佳位置在哪裏?
- 4. Rails 3:放置自定義驗證器類的最佳位置在哪裏?
- 5. 在哪裏執行驗證
- 6. 哪裏是放置表單驗證的最佳地點
- 7. 驗證Java服務器應用程序的最佳方法
- 8. 應用程序的位置在哪裏?
- 9. 加載YAML應用程序配置文件的最佳位置在哪裏?
- 10. Rails 4驗證:在進行包含時,在哪裏放置allow_nil?
- 11. 我在哪裏可以運行應用程序驗證程序命令
- 12. 在iOS應用程序中進行身份驗證的方法
- 13. 哪裏是驗證用戶進行身份驗證在asp.net mvc的
- 14. 在哪裏驗證PHP類中的輸入 - 最佳實踐
- 15. MVC驗證:在哪裏驗證?
- 16. 在哪裏驗證Django AJAX應用程序?
- 17. VS2010 Ultimate beta 2:應用程序驗證器在哪裏?
- 18. 執行XMLObject驗證的最佳方法
- 19. MVC項目應該在哪裏進行驗證?
- 20. 應該在哪裏進行驗證:端點或對象?
- 21. 使用Cookies進行PHP驗證的最佳做法是什麼?
- 22. 處理用貓鼬和快車進行數據驗證的最佳位置
- 23. 在哪裏初始化經過驗證的序列化字段?
- 24. 驗證應用程序塊的對象驗證不規則集
- 25. 驗證中的魔法在哪裏?
- 26. 如何爲iphone測驗應用程序進行逐字驗證?
- 27. 你在哪裏放置驗證邏輯?
- 28. 存儲過程驗證最佳方法
- 29. Java Web應用程序數據輸入驗證方法位置
- 30. 企業應用程序中數據驗證的最佳實踐
正確...客戶端的冗餘驗證可以避免驗證往返,但服務器必須負責所有驗證,以防止來自其他源的未驗證命中。 – 2008-11-30 15:39:49