2012-09-12 121 views
3

我正在創建一個Windows Forms應用程序,它將數據庫中的各種表讀入DataSet以便在多個DataGridViews中顯示上述表格。我沒有將所有代碼放在代碼隱藏文件中,而是開始對不同的設計模式進行一些研究,並且發現許多文章/主題都認爲MVP是WinForms的最佳選擇。在MVP WinForms應用程序中驗證

做了幾個教程,並開始使用MVP模式組織我的代碼;我將DataSet放置在Model中,Presenter中的大部分邏輯以及View中的所有其他部分。

我的問題是:我應該在哪裏放置用戶輸入的驗證?我不希望用戶能夠輸入無效值到DataGridView,如果他們碰巧這樣做,我想讓他們知道有錯誤的行/單元格。以前,我會處理RowValidating事件,並檢查DataGridView的行和單元格是否有任何錯誤,然後相應地顯示消息,但這似乎不適合MVP模式。

我應該在視圖中保留驗證還是應該將它移動到別處?

+0

http://stackoverflow.com/questions/217752/in-mvp-where-to-write-validations – Nope

回答

1

恕我直言,你應該保持視圖(表格)儘可能簡單。您確實可以訂閱RowValidating事件並從那裏調用演示者(presenter.ValidateRow(...)),並將信息傳遞給它並讓它處理驗證。如果驗證邏輯碰巧是複雜的並且必須一路完成(例如數據庫),那麼輪到他的演示者可以向模型詢問一些信息。如何處理錯誤是主講者的責任。驗證過程完成後,演示者的工作就是調用方法或在視圖上設置屬性以顯示失敗或成功。請記住,您的視圖只是您業務邏輯(對象)狀態的「窗口」。問自己這個問題:「如果我將這個特定的視圖與另一個實現相同的界面但不是我寫的界面交換,我的程序是否會運行?」。 你可能想看看這篇http://msdn.microsoft.com/en-us/magazine/ee336019.aspx文章,以進一步澄清MVP模式。

+0

可能的副本你是什麼意思「傳遞給它的信息,讓它處理驗證。」 ? – CAD

+0

將必須驗證的行數據傳遞給演示者的ValidateRow方法,並讓它處理驗證 –