2012-06-28 100 views
0

最近我一直在閱讀規格說明,我非常熱衷於使用它們。但是,我害怕過度。我應該使用簡單驗證邏輯的規範嗎?

例如,如果我有一個具有電話號碼屬性的用戶實體,是否需要將電話號碼規範測試放入setter中,還是需要將setter中的驗證邏輯足夠?

感謝, 菲爾

UPDATE: 欲瞭解更多背景: 我想,我想確認是在域名,而不是在演示文稿中。我將在演示文稿中實施驗證,但這將更多地是UI功能。這個想法(我相信)是域不能處於無效狀態,也不能依賴於表示。我實際上有一個電話號碼實體,許多實體有電話號碼,但我認爲這可能是對象的價值,但這是另一場辯論:)

我只是想知道是否過度使用規範屬性setter。我可以看到的一個優點是可以在圖層之間共享規格,即表示層,以便您可以共享驗證代碼。

正如您所見,我不確定這是否正確。

許多感謝, 菲爾

回答

0

你可能會考慮的前置和後置條件(不變或契約式設計)的概念。 前提條件是您的函數必須正確運行的事情。 當你的功能完成並正常退出時,發佈條件是事實。

「用戶的電話號碼有效」可能是您設置功能的良好後置條件。然而,對於前提條件,您有兩種選擇:(1)使其成爲您的setter函數的前提條件,即傳遞給它的任何內容都是有效的,或者(2)爲setter函數創建一個更鬆散的前提條件並執行錯誤檢查在你的setter函數中。選項(1)主要將驗證責任傳遞給客戶。選項(2)賦予您的用戶實體負責錯誤處理。

我認爲您選擇的設計將取決於您的具體應用的更大的圖片。

這裏是不變量和設計幾個環節的合同: http://svengrand.blogspot.com/2008/11/preconditions-postconditions-invariants.html http://en.wikibooks.org/wiki/Computer_Programming/Design_by_Contract

+0

我會更新我的問題更多的細節。這些文章雖然是值得思考的。 – Phillip