1. 程式人生 > >DAO解耦的本質——設計原則

DAO解耦的本質——設計原則

DAO是用於訪問資料的物件,資料可以儲存到資料庫、檔案、網路、快取中,儲存介質多種多樣

即便是同種儲存介質也有不同的訪問方法,例如資料庫,可以用不同的持久化框架和JDBC來實現資料的資料庫儲存。

為了實現業務層和資料訪問之間的解耦,定義DAO介面,用具體的技術實現DAO介面,業務層呼叫DAO介面進行資料的訪問,當要切換不同的資料訪問技術時,業務層無需改動,用新的訪問技術去實現DAO層的實現即可。

DAO可以遮蔽儲存介質的不同和具體的實現方法的不同,從而實現了DAO的解耦。

解耦的本質是抽象,先分析的具體的不同是哪些,再根據情況進行統一。把不同進行統一,把不同的操作抽象出一組介面或抽象類,上層呼叫抽象,不用管具體實現,而下層可以根據需要進行擴充套件,新增新的方法等,層次關係為:上層業務——抽象操作介面——下層對介面的具體實現。這也體現了設計原則中的開—閉原則,對上層修改關閉,對下層擴充套件開放。

Spring的DAO的解耦:Spring提供了統一的異常體系和統一的模板類訪問技術,遮蔽的不同持久化技術不同的異常體系,也遮蔽了不同持久化技術不同的資料訪問技術。這就為定義DAO層介面時提供了極大的便利。

試想,如果你定義一個DAO介面,具體實現為Mybatis技術,那你介面丟擲的異常就是Mybatis自帶的異常
當你要更換實現技術時,比如使用JDBC來實現,那麼你介面就要修改了,丟擲新的異常,對介面的修改會直接影響上層的呼叫,上層也需要對此作出相應的修改,這樣還是強耦合了
當然你可以自己把各種異常抽象化,丟擲統一的異常,但是Spring已經為你做了這件事了,減輕了你的負擔,這也是使用Spring的好處之一。
介面可以遮蔽具體實現,除了實現的不同,還有很多其他不同存在,對DAO來說,就存在了異常體系的不同,為此就行抽象,統一。解耦可以避免讓具體的實現入侵到使用者的上層程式碼中,Spring也是以統一的方式進行各種抽象,從而實現各種解耦,最後達到無侵入性同時具備擴充套件性的目的。