簡體   English   中英

在哪里放置cutom驗證?

[英]Where to put cutom validation?

在哪里放置自定義驗證及其可能具有的多種變體或條件的最佳位置?

謝謝!

我認為 DAO 不應該包含應用程序邏輯。 服務層應該進行所有驗證並返回有意義的錯誤消息。 在這種情況下,我會要求 DAO 查找產品,如果找到,則它是重復的。

現在我要稍微自相矛盾。

在我的代碼中,DAO 確實包含基本檢查,例如字段長度。 這些是偏執檢查,除了應用程序驗證之外還進行,因為我們使用的數據庫產生的錯誤消息在這些情況下是無用的,而且檢查成本很低。 在主鍵重復的情況下,數據庫錯誤消息是可用的,而偏執檢查會太昂貴。 但是,如果您認為應該這樣做,則可以將其作為安全措施進行。 這基本上是成本與收益分析。

我同意@Jonathan - 但有一種稍微不同的表達方式,以防萬一。

什么算作“已經存在”的產品名稱/別名? 我們在談論精確的字符串匹配嗎? 我們是否需要考慮數據輸入的變化(大寫/小寫;帶/不帶重音/變音符號的單詞;等等)? 如果您需要的不僅僅是嚴格的String相等,那么業務邏輯可能會非常復雜。

我的偏好是將最少量的此類檢索邏輯放入此處的 DAO 層 - 這通常歸結為select語句(或 Hibernate ORM 變體)的where子句中的內容。 不要將此類邏輯視為“檢查重復項”,而是將其視為返回結果集。 那是特定於 DAO 的。

其他所有內容(您對結果集中的數據執行的操作,以檢查重復項)都在服務層中。

(順便說一句,如果經驗可以作為指導,如果您還沒有全文索引,您可能最終需要一個全文索引。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM