2011-04-11 32 views
2

通常我必須處理一種保存方法,在保存到數據庫之前必須檢查幾件事情。C#如何實現執行多重檢查的Save方法?

我檢查的東西,例如,是空的屬性和取決於其他屬性的值。

我一直在努力如何實現這樣的事情。我問自己的問題是:

  • 我應該使用布爾值作爲Save方法的返回值嗎?在客戶端代碼中,檢查它是否爲false,向最終用戶顯示一個消息框:「保存失敗」。但問題是,我無法顯示用戶爲什麼保存失敗。所以我不太喜歡這個。
  • 在我的保存方法中,我應該拋出一個異常?所以當一個檢查失敗時,拋出一個異常?
  • 什麼都不做。當支票失敗時,不要做任何事情。但我認爲這不是一個真正的選擇。

我在想,你是怎麼實現這個的?有沒有一種模式?

+0

是什麼阻止您返回狀態對象或元組作爲驗證結果? – 2011-04-11 08:59:55

回答

3

恕我直言,這是不達標的節約方法來驗證的對象。當調用Save時它應該是有效的。因此,如果對象沒有被正確指定,則拋出異常是可以的。

至於驗證,在.NET中構建了一個名爲DataAnnotations的框架。在所有圖層中使用它進行更簡單的驗證。

+0

我想我同意。在調用Save方法之前,'客戶'必須檢查驗證。這些驗證方法可供客戶使用。所以如果客戶端不調用這個方法,Save方法可能會拋出一個異常。對? – Martijn 2011-04-11 09:10:44

+0

Excactly。客戶端應該進行驗證,因爲在那裏爲用戶顯示一些奇特的錯誤消息要容易得多。 save方法仍應該進行驗證,但是任何錯誤都是意外的,因此例外是報告該問題的正確方法。 – jgauffin 2011-04-11 09:14:08

0

它取決於你需要什麼和用戶需求...
基本上你可以返回一個字符串:如果爲null或空一切正常,相反,這個字符串是錯誤。所以你可以顯示一個MessageBox或者採取你喜歡的任何操作。
通常我寧願不做任何服務器端(如果有錯誤)並返回錯誤本身,所以客戶端可以採取行動或讓用戶決定要做什麼。
如果發生錯誤,您甚至可以從服務器返回異常,如果一切正常,您甚至可以返回null。

0

如果您想知道保存失敗的原因,請使用它們存在的異常。

1

你不應該返回字符串,但應該拋出異常。您可以創建特定的異常,如EmptyPropertyException,DateOutOfBoundException等,並將其扔掉。現在,客戶需要捕捉這些例外以顯示正確的錯誤消息。使用異常更好,因爲您可能希望在不同位置顯示稍微不同的錯誤消息,或者可能需要使用本地化的字符串。

+0

這不是控制流,如果有任何期望的參數丟失,需要拋出異常! – 2011-04-11 09:02:38

+0

然後它不是輸入驗證。輸入驗證是指數據是否在有效範圍內,是否爲空,等等。 – 2011-04-11 09:05:15

0

我會使用類似於結果狀態的東西 - 一個具有布爾屬性的對象,顯示操作是否成功,如果發生某些錯誤和發生異常,則顯示用戶的消息。

相關問題