萬里獨行  
          策馬牧羊
          日歷
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345
          統計
          • 隨筆 - 2
          • 文章 - 1
          • 評論 - 4
          • 引用 - 0

          導航

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章檔案

          友情鏈接

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

           
                  在Java軟件項目中常常將持久層抽象成DAO,因為JDBC、甚至是Hibernate等ORM框架都不能提供足夠簡便和純粹的面向對象的數據庫操作,而將底層的數據庫操作抽象成DAO層之后,能往上提供一致的簡單的接口,對于項目的可維護性和復用都有很大的意義。
                  但是在一次又一次的項目開發中,我們都必須重新編寫DAO層,有人覺得這是在對底層操作封裝、是一項愉快的工作,但是我認為這是一項目重復的、應該想辦法避免的工作,之所以要為項目設計DAO層,是因為現今的ORM框架不夠完善,只是對JDBC的簡單封裝,導致當我們想以一種面向對象的方式簡單地實現持久化操作時,只能通過自己編寫DAO。難道持久層框架的作用不能擴大到讓DAO從我們的視野中消失嗎?
                  為了說明上面的問題,我舉一個簡單的例子:
                  假設一個論壇需要一個“根據用戶名字查詢該用戶的所有信息(User對象)”的功能,我們不是守舊的JDBC派,我們在項目中應用了Hibernate,但是,Hibernate仍然不能很好地完成這個任務,為了查出這個用戶,我們需要寫丑陋的HQL語句,需要打開Session。沒有人愿意一次又一次地編寫這些重復的代碼,于是我們把這些笨重的過程封裝成了一個函數 getUserByName(String),這個函數自然是屬于一個DAO的,于是DAO層理所當然地擁有了立足之地。現在請考慮這樣一個問題,如果我們用的不是Hibernate,而是另一個持久層框架,假設它的名字叫AliveRecord,它提供了這樣的查詢功能find(Filter filter),Filter類以一種簡單的方式描述了你的查詢條件,于是“根據用戶名字查詢該用戶的所有信息(User對象)”這個功能只需要一行代碼就能實現,在這樣的情況下,你還會花無謂的時間去專門寫一個DAO嗎?
                  總結上面的問題,我們需要一個不僅能提供持久化操作、而且其使用方式簡單到可以替代DAO的框架。
                  但是要設計這樣一個框架,除去性能等因素,還有一個非常艱巨的問題:如何使用Java語言表達SQL語句的語義?大家知道,SQL是解釋語言,非常靈活,可以構造極度復雜的查詢條件,而在持久層框架中,要想不新增HQL、EJBQL等類SQL的語言、單純用Java去描述我們想要查詢的記錄。
          posted on 2008-11-23 12:47 萬里獨行 閱讀(177) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
           
          Copyright © 萬里獨行 Powered by: 博客園 模板提供:滬江博客
          主站蜘蛛池模板: 即墨市| 鹤峰县| 准格尔旗| 晋中市| 廊坊市| 平邑县| 玛多县| 曲阜市| 岑溪市| 特克斯县| 枣强县| 卓资县| 林西县| 丰原市| 扎鲁特旗| 崇礼县| 中宁县| 道孚县| 孝感市| 金坛市| 桦甸市| 玛沁县| 莱州市| 宁河县| 株洲市| 平山县| 定陶县| 隆林| 什邡市| 玉田县| 安远县| 陕西省| 金坛市| 旬邑县| 镇宁| 右玉县| 阿拉善盟| 新河县| 鄂托克旗| 太仆寺旗| 紫云|