<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-20  評論-3  文章-9  trackbacks-0
    隨著軟件分層設(shè)計的流行及廣泛的應(yīng)用,對于DAO的設(shè)計模式大家已經(jīng)不再陌生了,DAO層已經(jīng)在軟件系統(tǒng)的開發(fā)中成為必不可少的一層,將后臺的數(shù)據(jù)層和前臺的VO進(jìn)行分離。前段時間也針對于DAO的設(shè)計介紹過一個基于Hibernate的泛型DAO的設(shè)計。
    csdn blog:http://blog.csdn.net/yongtree/archive/2008/03/12/2172071.aspx
    javaeye blog:http://yongtree.javaeye.com/blog/170449

    通過DAO的設(shè)計的確可以讓我們的軟件系統(tǒng)已經(jīng)將數(shù)據(jù)層和表現(xiàn)層進(jìn)行了簡單的分離,讓我們系統(tǒng)各層次的功能更加的清晰。所以我們開始洋洋得意了,DAO的引入讓系統(tǒng)的耦合性更加的松散,表現(xiàn)層再也不需要關(guān)心后臺數(shù)據(jù)操作的變化了。于是我們開始高枕無憂了,我們肆無忌憚的在表現(xiàn)層通過調(diào)用DAO來實(shí)現(xiàn)我們的系統(tǒng)了。事實(shí)真的如此嗎?那我們就舉個例子來看看我們的系統(tǒng)是否真的具有解偶的能力了。
    現(xiàn)在我們有個員工管理系統(tǒng),在該系統(tǒng)中,Person.java表示員工這個對象,它對應(yīng)著數(shù)據(jù)庫中的person表。還有用于操作Person對象的DAO接口—PersonDAO.java,還有一個PersonDAO的實(shí)現(xiàn)類PersonDAOImpl.java。在PersonDAOImpl.java中我們實(shí)現(xiàn)了操作Person對象的所有的方法。我們很自豪的說,看我們已經(jīng)把操作封裝在PersonDAO中了,現(xiàn)在我們可以在表現(xiàn)層(jsp,或者VO操作類中)使用PersonDAO personDAO=new PersonDAOImpl()來調(diào)用DAO操作我們的數(shù)據(jù)對象了。當(dāng)我們陶醉于自己寫的優(yōu)美的代碼的時候,項目經(jīng)理來通知了,由于使用Hibernate的效率偏低,客戶開始不滿了,還是讓我們重新用JDBC再重寫一遍吧。于是所有DAO的Hibernate實(shí)現(xiàn)開始全部轉(zhuǎn)換成JDBC實(shí)現(xiàn)。但是項目經(jīng)理建議不要破壞現(xiàn)有的Hibernate實(shí)現(xiàn),以后可以通過技術(shù)研究來提升Hibernate的訪問效率。于是我們開始寫了又寫了一套JDBC的實(shí)現(xiàn)—PersonDAOJDBCImpl.java,現(xiàn)在問題出來了,表現(xiàn)層大量的使用了PersonDAO personDAO=new PersonDAOImpl(),全部改成new PersonDAOJDBCImpl()談何容易,我們是不是開始欲哭無淚了。
    怎么解決類似的問題呢?于是我們開始引進(jìn)工廠模式。我們建立一個類DaoFactory.java對DAO進(jìn)行統(tǒng)一管理。
    DaoFactory.java:
    public class DaoFactory{
    public static PersonDAO getPersonDAOInstance()
    {
    return new PersonDAOImpl() ;
    }
    //得到其他的DAO實(shí)例
    ……
    }
    表現(xiàn)層通過PersonDAO personDAO=DaoFactory.get getPersonDAOInstance();來實(shí)例化DAO實(shí)例。這樣問題就解決了,DAO改變了,我們只需要在DAO工廠類中修改一下代碼:return new PersonDAOJDBCImpl() ;那我們的應(yīng)用就快速切換到JDBC實(shí)現(xiàn)了。可見利用工廠模式,我們的系統(tǒng)又進(jìn)一步的解耦,表現(xiàn)層真的無需再關(guān)系DAO層的變化了,一切交給DAO工廠來解決。
    使用過Spring這樣框架的開發(fā)人員都知道,Spring通過利用IoC來實(shí)現(xiàn)類之間的解耦。其實(shí)在DAO工廠中我們也可以簡單的借鑒一下IoC的思想,更進(jìn)一步解除類之間的耦合。Spring是通過配置xml文件來進(jìn)行IoC的,那么我們也可以借助于xml文件來實(shí)現(xiàn)。比如下面的xml:
    <?xml version="1.0"?>
    <config>
    <daos>
    <!-- 組織機(jī)構(gòu)服務(wù)接口實(shí)現(xiàn)類 -->
    <dao id="organizationService"
    type="com.baiyyy.oa.services.organization.OrganizationServiceImpl">
    </dao>
    <!-- 工作流參與者接口 -->
    <dao id="participantService"
    type="com.baiyyy.workflow.services.impl.ParticipantServiceImpl">
    </dao>
    <!-- 工作流定義接口 -->
    <dao id="processDefinitionService"
    type="com.baiyyy.workflow.services.impl.ProcessDefinitionServiceImpl">
    </dao>
    <!-- 工作流實(shí)例接口 -->
    <dao id="processInstanceService"
    type="com.baiyyy.workflow.services.impl.ProcessInstanceServiceImpl">
    </dao>
    </daos>
    </config>
    這是我設(shè)計實(shí)現(xiàn)的工作流系統(tǒng)給業(yè)務(wù)系統(tǒng)提供的接口所配置的xml,所有的接口都配置在xml中,我們怎么使用呢?我只不過是把DAO工廠進(jìn)行進(jìn)一步的改進(jìn),通過ProcessInstanceService processInstanceService=DaoFactory.getDao(ProcessInstanceService.class,” processInstanceService”);從傳入的參數(shù)我們可以看出,我們清楚的知道要調(diào)用的接口ProcessInstanceService,同時通過字符串” processInstanceService”,我們可以解析上面的配置文件,得到具體實(shí)現(xiàn)類的路徑,通過反射得到該實(shí)現(xiàn)類的實(shí)例。具體的DAO工廠類的實(shí)現(xiàn),朋友們有興趣可以自己去實(shí)現(xiàn),我就不詳細(xì)介紹了。
    終于寫完了,以上便是對DAO工廠一些淺顯的理解。現(xiàn)在正在學(xué)習(xí)設(shè)計模式,以后會根據(jù)自己的所學(xué)所思,介紹自己對各個設(shè)計模式的理解,希望大家一塊學(xué)習(xí)討論。

    posted on 2008-06-04 15:17 藍(lán)山 閱讀(278) 評論(0)  編輯  收藏

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 日本亚洲视频在线| 成年女人喷潮毛片免费播放| 久久久久久av无码免费看大片| 老湿机一区午夜精品免费福利| 亚洲a∨国产av综合av下载 | 无遮免费网站在线入口| 131美女爱做免费毛片| xxxxx免费视频| 成人福利免费视频| 久久久久国色AV免费观看性色 | 精精国产www视频在线观看免费| www在线观看免费视频| 久久九九免费高清视频| 成人网站免费大全日韩国产| 中文字幕成人免费高清在线视频| 黄色网页在线免费观看| 免费av片在线观看网站| 91嫩草免费国产永久入口| 91免费国产自产地址入| 成人毛片18女人毛片免费| 日韩成人在线免费视频| 亚洲?V无码乱码国产精品| 亚洲男人av香蕉爽爽爽爽| 亚洲精品国产精品乱码不99| 亚洲精品免费视频| 亚洲一区二区三区高清不卡 | 亚洲欭美日韩颜射在线二| 国产亚洲人成网站观看| 久久久久亚洲AV无码网站| 亚洲成AV人片久久| 亚洲欧美日韩综合久久久久 | 777亚洲精品乱码久久久久久| 亚洲日本va在线观看| 朝桐光亚洲专区在线中文字幕| 免费国产a理论片| 久久综合九色综合97免费下载| 日本最新免费网站| 色播在线永久免费视频| 亚洲中文字幕久久精品无码APP | 亚洲综合区小说区激情区| 久久精品国产亚洲夜色AV网站|