似乎實現驗證的最佳位置儘可能接近數據庫,所以當我使用實體框架時,最近的對象是實體,在我的情況下是POCO實體。這是一個好主意,首先在實體框架POCO實體中實現驗證嗎?
原因是,如果我想重用這個POCO實體,驗證在POCO對象中實現,然後在數據庫中插入worng數據的可能性較小。
這也避免了有人試圖在創建另一個應用程序的數據庫中插入不正確的數據,或者因爲他沒有實現驗證。所以它更安全。
一種方法是使用擴展POCO實體並實現IValidatableObject接口並返回validationresult列表的部分類。
但是其他方式如下。我有一個通用程序集,它具有以下內容:
- 一個聲明需要實現存儲庫的方法的接口。
- 存儲庫將使用的POCO實體。
- 一類帶有實用程序的類,例如複製實體和驗證實體數據的方法。
然後我可以創建使用不同版本的EF或其他技術的許多存儲庫,並且所有這些存儲庫都使用通用程序集。該存儲庫使用公共庫中的方法實現驗證。
在這種情況下,我僅實現驗證一次。唯一的問題是存儲庫需要調用方法來驗證數據。
但是從我的角度來看,這種方式有很多優點。例如,我可以根據操作的類型驗證實體的數據。例如,如果我添加一條新記錄,並且主鍵爲自動數字,如果ID不是0,那麼我可以拋出一個異常,或者如果我在ID爲0時嘗試刪除一個寄存器,那麼我不會'不需要將命令發送到數據庫。
因此,第二個解決方案解決了實現驗證儘可能接近數據庫的問題,在存儲庫中使用了bacause,即訪問數據庫的元素,但存在如果某些開發人員創建新的存儲庫,而不使用驗證方法,我可以在數據庫中有不正確的數據。
所以我的問題是,如果最好的選擇是使用部分類的驗證或使用公共庫,並驗證在存儲庫中實現,那真正是用戶將使用。
謝謝。