冰浪

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

          ???? DAO Date Access Object 的縮寫,就是數(shù)據(jù)訪問對象。 DAO 模式就是將對數(shù)據(jù)庫的操作都封裝成一個類,在需要進行數(shù)據(jù)存取時就直接調(diào)用 Dao 類實例對象來完成的一種工作方式,這也是面向?qū)ο缶幊痰囊环N體現(xiàn)。

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

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

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

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

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

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

          ?

          我以前寫程序,根本就不會去用接口,也不明白接口有什么用,也不會去用抽象類,動手就是實例類,最多也就是用到繼承,以為這就是面向?qū)ο罅恕倪@可以看我的面向?qū)ο蠡A(chǔ)不太好,我覺得很大程度是因為我們大學里所用教材的原因,教材里所寫的就只是一些語法。而自己又是大三下學期才決定轉(zhuǎn)入 Java 方向的,所以深深知道自己要學習的東西太多太多。在大四時我就決定好好補上這一課,而當我在網(wǎng)上看到孫衛(wèi)琴的《 Java 面向?qū)ο缶幊獭愤@本書并預讀了其中一章內(nèi)容時,我馬上做出了買書的決定!因為這本書剛出版的原因,我沒有在惠州買到,所以就托我哥在順德買了下來,拿到手后如獲至寶。現(xiàn)在,我已經(jīng)基本上看完了這本書,明白了很多東西,覺得自己的面向?qū)ο笏枷胍呀?jīng)達到了一個質(zhì)的飛躍。在此我要特別感謝孫衛(wèi)琴老師,給我們寫了一本這么好的書。也是因為這些,我才可以寫下這篇開發(fā)日記,算是有點東西的東西。


          評論

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

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

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

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

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

          2007-03-14 10:57 by L
          persistent層最好還是需要一個框架,尤其是到最后你需要transaction management的時候。
          主站蜘蛛池模板: 铁岭市| 高清| 颍上县| 当阳市| 饶河县| 丰都县| 灵丘县| 永州市| 浏阳市| 荃湾区| 原平市| 额济纳旗| 通榆县| 林甸县| 将乐县| 杭锦旗| 水富县| 文登市| 阿拉善盟| 辽阳县| 霍城县| 韶山市| 昌黎县| 和平县| 乌拉特前旗| 泗洪县| 宜良县| 镶黄旗| 孝昌县| 托里县| 昆山市| 广水市| 陆丰市| 甘德县| 临安市| 绍兴县| 泰州市| 肇东市| 连江县| 黎川县| 茌平县|