關於Dao層職責的思考

一直被Dao層應該如何抽象,Dao職責如何劃分這樣的問題困擾,突然間,我彷彿看到了真理。程序員

  • 一個Dao只操做一個數據實體。Dao提供接口,你不用管接口怎麼實現的(你別管接口的實現是否涉及了多張表,這是寫Dao層代碼的程序員該關注的問題)只要它實現了它的接口所描述的面向其數據實體的功能就行。

之前我對Dao的理解是下面這樣的:sql

dao層只提供操做接口,不處理業務邏輯。也就是隻處理數據存儲的規約,而非業務邏輯。這一點須要特別注意。什麼是存儲規約?例如,數據類型轉換。什麼是業務邏輯?例如,你的sql語句出現了某些寫死的固定狀態查詢,而這種固定狀態表明瞭某種特定的業務。實際上你應該經過接收參數的方式來查詢不一樣狀態的數據。

這是不對的!!!存取數據自己就是業務的一部分,按照上面的邏輯思考這個問題,會出現業務邏輯由於分頁,聯表等操做被強行帶入sql的問題。但若是按照新的原則來思考,Dao爲一個肯定的數據實體提供操做接口,問題就迎刃而解了!code

這個原則沒有限制Dao和表的一對一關係(也就是數據實體和表的關係),一個Dao能夠對應多個表,也能夠只對應一個表。不過我傾向於一對一的解決方案。接口

這個原則沒有制約業務邏輯入侵sql,但因爲Dao的操做是聚焦於一個特定數據實體的,其接口從某種意義上說,就只是數據存取。sql語句

相關文章
相關標籤/搜索