,因爲DAO層通常負責在給定某些輸入(如user_id等)的情況下從數據庫訪問數據,它是否應該關心檢查其輸入的有效性?DAO應該驗證輸入
E.g.如果有一個DAO方法根據user_uid(一個(> 0)主鍵)獲取用戶,那麼在進行必要的DB調用之前,DAO方法是否應該總是檢查這個約束?還是應該假設任何調用此方法的更高層都會照顧這個約束並且永遠不會傳遞一個-ve id? DAO方法可以在其文檔中發佈此約束,以便編寫更高層的程序員知道它。
您通常會使用哪種方法,爲什麼?
感謝和問候!
,因爲DAO層通常負責在給定某些輸入(如user_id等)的情況下從數據庫訪問數據,它是否應該關心檢查其輸入的有效性?DAO應該驗證輸入
E.g.如果有一個DAO方法根據user_uid(一個(> 0)主鍵)獲取用戶,那麼在進行必要的DB調用之前,DAO方法是否應該總是檢查這個約束?還是應該假設任何調用此方法的更高層都會照顧這個約束並且永遠不會傳遞一個-ve id? DAO方法可以在其文檔中發佈此約束,以便編寫更高層的程序員知道它。
您通常會使用哪種方法,爲什麼?
感謝和問候!
答案取決於業務層(大概在數據層之上)是否驗證了這些值,以及是否可以從任何其他層(例如工作流層)調用數據層。
通常,在業務層中捆綁驗證並約束層通信是一個好主意,因此數據層只能通過業務層調用。
我們還添加鍵/ null的驗證在存儲過程中檢查,以防今後再服務決定嘗試將無效數據。
DAO層不應檢查輸入的有效性。在持久層(例如:外鍵)中檢查數據的完整性和一致性,並在業務層中檢查「業務」相關的有效性。 DAO層的唯一責任是與持久層通信以存儲或檢索數據。