2012-09-21 42 views
3

我是新來的企業設計模式。我被告知數據訪問對象不是用來驗證它們的輸入。如果某個其他圖層需要執行驗證,那麼該圖層是否需要知道所有數據庫細節,如表名等等?這不會破壞封裝DAO的目的嗎?誰將驗證我的DAO的輸入?

也許我對DAO責任的理解是關閉的,服務層也假設有數據庫知識,但這似乎很奇怪。目前,我的數據訪問對象只執行CRUD操作。

注:我使用普通的servlet,沒有MVC框架或持久性框架。

回答

2

正確實現數據訪問對象應該只執行crud操作。數據庫上唯一應該存在的驗證是輸入約束,如唯一索引,外鍵,檢查約束等。除此之外的其他一切應該由與DAO接口的層處理。可以設置這些約束,以便數據庫服務器在檢索或更新表之前自動執行它們。沒有必要將其納入DAO的邏輯。

2

一個普通的3層應用程序有一個接口層,一個業務層和一個數據層。數據層通常是對數據庫的非常薄的覆蓋,通常不會進行任何驗證,除非有時會驗證varchar列的字符串長度。
任何業務驗證(例如在用戶名中不包含數字或不允許密碼中的空格)將在接口層(出於性能原因)和業務層都進行。 如果您在某處找到示例Web應用程序,他們應該很清楚地證明這一點。

+0

對於需要數據庫知識的驗證,比如ID是否是唯一的,或者列輸入是否屬於一組允許的輸入? –