冰浪

          哥已不再年輕 - 堅定夢想,畢生追求!
          posts - 85, comments - 90, trackbacks - 0, articles - 3
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          ???? DAO Date Access Object 的縮寫,就是數據訪問對象。 DAO 模式就是將對數據庫的操作都封裝成一個類,在需要進行數據存取時就直接調用 Dao 類實例對象來完成的一種工作方式,這也是面向對象編程的一種體現。

          CSUOA 中,我將數據庫里每一個表都對應一個實體 Entity ,而每一個 Entity 都對應著一個 Dao 的實例類,用于進行相應的操作。

          CSUOA 數據庫里有 oauser , mail message 等表,分別代表用戶表,郵件表,短信息表。那么我就對應著有 OauserDao.class MailDao.class MessageDao.class Dao 實例類。而我們知道,數據庫操作中最基本的就是增刪改,這也是共性,所以我將增刪改操作抽象出來,建立一個 Dao 抽象類 BaseDao.class ,作為 Dao 實例類的父類,其類方法可為增刪改的抽象方法或實例方法,具體要根據數據持久操作的底層實現來確定。當然,進一步來說,獲取對象也是基本的操作,在這里省略了。

          那么,到這里就完成了嗎?沒有!按照面向接口編程的原則,我再建立一個 Dao 接口: Dao.class 作為抽象類 BaseDao.class 的父類。而在 Dao.class 里,我們只聲明了增刪改的無任何實現的抽象方法。

          接口不能實例化,定義了接口又怎么用呢?對,接口是不能實例化,但我們可以聲明一個接口類型的引用。也就是創建一個 Dao 實例對象,但聲明其類型為 Dao 接口類型。例如: Dao dao = new OauserDao(); 這樣有何意義呢?是因為對松耦合的要求,這點我們在下篇再詳細說明。

          除了要進行基本的增刪改操作外,有些 Entity 還要進行其它一些操作,如查詢。我首先想到的是,在 OauserDao.class 里擴展功能,加入查詢方法,以致于可以進行查詢操作。即在 Dao dao = new OauserDao(); 后用 dao.query(“queryStr”); 進行查詢操作,但此時,編譯器報錯了,說“沒有為 Dao 定義 query() 方法”。想想也對,將 dao 聲明為 Dao 類型,編譯器就以 Dao 類型所擁有的方法進行編譯,但此時編譯器無法在 Dao 接口類里找到此方法,所以報錯了。

          幾經思考后,想到可以這么做:新建立一個 Query.class 的接口類,并聲明查詢方法,然后在 Dao 實例類如 OauserDao.class 里實現 Query 接口。我們知道,一個類可以實現多個接口,這就是接口的優勢。在要進行查詢操作時,我們將之前 dao 實例對象聲明為 Query 類型,此時就通過了編譯并實現了我所要的結果。

          ?

          我以前寫程序,根本就不會去用接口,也不明白接口有什么用,也不會去用抽象類,動手就是實例類,最多也就是用到繼承,以為這就是面向對象了。從這可以看我的面向對象基礎不太好,我覺得很大程度是因為我們大學里所用教材的原因,教材里所寫的就只是一些語法。而自己又是大三下學期才決定轉入 Java 方向的,所以深深知道自己要學習的東西太多太多。在大四時我就決定好好補上這一課,而當我在網上看到孫衛琴的《 Java 面向對象編程》這本書并預讀了其中一章內容時,我馬上做出了買書的決定!因為這本書剛出版的原因,我沒有在惠州買到,所以就托我哥在順德買了下來,拿到手后如獲至寶。現在,我已經基本上看完了這本書,明白了很多東西,覺得自己的面向對象思想已經達到了一個質的飛躍。在此我要特別感謝孫衛琴老師,給我們寫了一本這么好的書。也是因為這些,我才可以寫下這篇開發日記,算是有點東西的東西。


          評論

          # re: 畢業設計開發日記連載4:DAO模式和面向接口編程  回復  更多評論   

          2007-02-28 09:32 by 我為J狂
          “Dao.class 作為抽象類 BaseDao.class 的父類”這句話不太準確,應該這樣闡述“BaseDao實現了Dao接口”。

          # re: 畢業設計開發日記連載4:DAO模式和面向接口編程  回復  更多評論   

          2007-03-02 08:53 by 壞男孩
          孫JJ寫的書真的值得一睹

          # re: 畢業設計開發日記連載4:DAO模式和面向接口編程  回復  更多評論   

          2007-03-14 10:57 by L
          persistent層最好還是需要一個框架,尤其是到最后你需要transaction management的時候。
          主站蜘蛛池模板: 郧西县| 延川县| 新乡县| 盐山县| 博野县| 鄂州市| 长阳| 昆山市| 达州市| 甘孜| 元氏县| 双牌县| 基隆市| 西城区| 敦煌市| 米泉市| 二连浩特市| 门头沟区| 绿春县| 陇南市| 垫江县| 柘荣县| 二手房| 丰顺县| 阳山县| 涿州市| 泸水县| 嘉定区| 长顺县| 南京市| 云浮市| 阿瓦提县| 凤庆县| 霍林郭勒市| 永顺县| 丰台区| 当涂县| 新密市| 平舆县| 平武县| 洪湖市|