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

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

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

    posts - 3, comments - 13, trackbacks - 0, articles - 0
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    2006年3月9日

         摘要: 該文主要介紹了一個(gè)我和同學(xué)合作的項(xiàng)目,使將非結(jié)構(gòu)化流程圖轉(zhuǎn)換成結(jié)構(gòu)化流程圖的程序。  閱讀全文

    posted @ 2006-06-03 12:11 舉止優(yōu)雅的豬 閱讀(2671) | 評(píng)論 (1)編輯 收藏

    在暑假里看了“Refactoring to Patterns”這本書,覺得很不錯(cuò)。里邊講到了很多在優(yōu)化編碼時(shí)可以用到的設(shè)計(jì)模式以及它們的用法。
        我在編程時(shí),一般都是用Spring作為中間層管理資源,而用Hibernate作為ORM。用過(guò)Spring的人都知道Spring對(duì)Hibernate的支持方法較多,我常用的是直接繼承HibernateDaoSupport類。我們先來(lái)看一個(gè)類圖:
    Dao Class Diagram
    在是我在應(yīng)用中常用到的類結(jié)構(gòu)。因?yàn)閷?duì)于一個(gè)域模型來(lái)說(shuō),最基本的就是CRUD操作,所以將其放在Dao接口中,但是對(duì)于每個(gè)不同的域模型又有其特有的方法,則將其放在域模型對(duì)應(yīng)的接口(SomeSpecificDao)中。
        這樣,對(duì)于最基本的CRUD操作就可以只需在BaseHibernateDao中實(shí)現(xiàn),這一點(diǎn)利用了Template Method設(shè)計(jì)模式。對(duì)于create(), delete()和modify()三個(gè)方法都可以簡(jiǎn)單實(shí)現(xiàn),即調(diào)用HibernateTemplate中相應(yīng)的方法。對(duì)于findAll和findById,則可以借住Java的反射來(lái)實(shí)現(xiàn)。這里如果要利用反射且達(dá)到通用的目的,就需要將所有的域模型放在一個(gè)包中,并且有相同的命名規(guī)則,比如說(shuō)如果域模型叫做User,那么相應(yīng)的Dao應(yīng)該以User開頭,不過(guò)這也是常用的方法。下面給出一小段代碼
    /**
         * A convenience and generic method for retrieving all models from the database
             * @throws DataAccessException
         */

        
    public List findAll() throws DataAccessException {
            
    // TODO Auto-generated method stub
            List models = new ArrayList();
            
    try {
                models 
    = getHibernateTemplate().loadAll(
                        Class.forName(getClass().getName().replaceAll(
                                
    "HibernateDao""").replaceAll("dao.hibernate",
                                
    "model")));
            }
     catch (ClassNotFoundException exception) {
                
    // TODO Auto-generated catch block
                exception.printStackTrace();
            }

            
    return models;
        }
        以上給出的是findAll的實(shí)現(xiàn),findById也是一樣。這樣一來(lái),就無(wú)需再在子類中重復(fù)編寫CRUD算法的實(shí)現(xiàn)了。
         再有就是在編寫子類Dao中特有的find方法,因?yàn)槔肏ibernateTemplate中的execute方法來(lái)實(shí)現(xiàn),所以可以在BaseHibernateDao這個(gè)父類中編寫一個(gè)protected的方法,以便子類Dao調(diào)用,這個(gè)方法中包含了調(diào)用HibernateTemplate中execute方法的代碼:
    /**
         * Covenience method for retrieving objects by HQL
         
    */

        
    protected Query find(final String query)
                
    throws DataAccessException {
            Query aQuery 
    = (Query) getHibernateTemplate().execute(
                    
    new HibernateCallback() {
                        
    public Object doInHibernate(Session session) {
                            
    return session.createQuery(query);
                        }

                    }
    );
            
    return aQuery;
        }
         這樣在子類Dao中就可以直接調(diào)用該find方法來(lái)實(shí)現(xiàn),而不必每次都編寫繁瑣的execute方法。
         以上的方法我都做過(guò)測(cè)試,在實(shí)現(xiàn)和應(yīng)用中沒有問(wèn)題。在效率上可能會(huì)比在子類中實(shí)現(xiàn)要差一點(diǎn),因?yàn)閒ind*方法中用到了Java的反射,對(duì)效率會(huì)一定的影響,這是缺點(diǎn)之一。如果有哪位有更好的辦法,請(qǐng)?jiān)谠u(píng)論中寫出,歡迎大家進(jìn)行評(píng)判,謝謝……

    posted @ 2006-03-09 10:36 舉止優(yōu)雅的豬 閱讀(1066) | 評(píng)論 (2)編輯 收藏

    主站蜘蛛池模板: 亚洲自偷自偷在线制服| 在线免费观看中文字幕| 亚洲日韩中文无码久久| 国产黄在线观看免费观看不卡| 免费国产怡红院在线观看| 特级毛片全部免费播放| 亚洲 无码 在线 专区| 一本一道dvd在线观看免费视频 | 一级日本高清视频免费观看| 国产v片免费播放| 理论片在线观看免费| 久久青青草原亚洲av无码| 精品久久久久久国产免费了 | 国产高清免费在线| 国产精品亚洲精品日韩动图| 亚洲精品视频免费观看| 中文字幕无线码免费人妻| 亚洲尹人九九大色香蕉网站| 97视频免费在线| 亚洲爆乳无码精品AAA片蜜桃| 免费人成网站7777视频| 国产综合免费精品久久久| 亚洲欧洲春色校园另类小说| 精品久久洲久久久久护士免费| 青娱乐在线视频免费观看| 久久亚洲国产精品一区二区| 国产一卡2卡3卡4卡2021免费观看| 亚洲爆乳大丰满无码专区| 亚洲色WWW成人永久网址| 亚洲一区在线免费观看| 国产AV无码专区亚洲AV麻豆丫 | 午夜神器成在线人成在线人免费| 无码 免费 国产在线观看91| 久久国产精品亚洲一区二区| 成人毛片免费视频| 热99RE久久精品这里都是精品免费| 亚洲国产成人久久77| 久久久久亚洲精品无码网址| 成人免费视频77777| 中文在线免费看视频| 亚洲精品无码你懂的|