這些年來,我總是忽略了「告訴,不要問」OOP原則,因爲我幾天前第一次瞭解到它。「告訴,不問」適用於用戶輸入驗證嗎?
但是上下文是關於驗證代碼的討論,這些驗證代碼已經從ASP.NET Web窗體頁面移出到數據/業務對象中,並且沒有「Validate()」方法,只是一種保存方法本身做了驗證和(據說)提出了一個例外。我問這是爲什麼這樣設計的,我被引導到OOP的「告訴,不要問」的原理,這是我從來沒有聽說過的,所以我們一起看了谷歌,我立即受到了教育。 ;)
儘管如此,某些東西並沒有正確的味道,但不應該在數據從用戶手中轉移出去並進入處理和/或收集的業務層之前進行清理,而不是反過來?我很困惑這是如何爲優秀的設計做出的。
似乎「告訴,不要問」的規則屬於這樣的想法,即您不應該向目標對象詢問目標對象的狀態,並且該原則從未真正意圖應用於數據正在通過到的目標對象。
例外情況可用於處理意外情況(內存不足/磁盤已滿/連接已關閉/分佈式事務失敗) - 驗證用戶提交的數據並非意外。使用「處理程序」方法 - 只需調用validate_number(invalid_handler_callback) – 2011-04-03 23:08:33