<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)航:
     
    主站蜘蛛池模板: 国产又大又长又粗又硬的免费视频| 国偷自产一区二区免费视频| 无码免费午夜福利片在线| 亚洲精品福利视频| 国产午夜精品久久久久免费视 | 处破女第一次亚洲18分钟| 成人毛片免费观看| 亚洲AV无码一区二区三区电影| 成年性午夜免费视频网站不卡| 亚洲精品无码永久在线观看男男 | 鲁丝片一区二区三区免费| 亚洲AV福利天堂一区二区三| 波多野结衣免费一区视频| 亚洲第一视频网站| 99久久免费国产香蕉麻豆| 亚洲人成电影院在线观看| 免费涩涩在线视频网| 青青草国产免费国产是公开| 激情综合色五月丁香六月亚洲| 成人电影在线免费观看| 亚洲视频一区网站| 国产一级淫片免费播放| jizz在线免费播放| 亚洲美女视频免费| 国产精品免费视频播放器| 2022国内精品免费福利视频| 亚洲高清视频在线观看| 18禁超污无遮挡无码免费网站国产| 相泽南亚洲一区二区在线播放| 国产亚洲成人在线播放va| 国产白丝无码免费视频| 亚洲色精品VR一区区三区| jlzzjlzz亚洲乱熟在线播放| 性xxxxx大片免费视频| 亚洲男同gay片| 亚洲人成网站在线观看播放| 2020久久精品国产免费| 一级a性色生活片久久无少妇一级婬片免费放 | 亚洲人成网站免费播放| 成在人线av无码免费高潮水 | 亚洲国产成人AV网站|