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

          2006年3月5日

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

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

          在暑假里看了“Refactoring to Patterns”這本書,覺得很不錯。里邊講到了很多在優(yōu)化編碼時可以用到的設(shè)計模式以及它們的用法。
              我在編程時,一般都是用Spring作為中間層管理資源,而用Hibernate作為ORM。用過Spring的人都知道Spring對Hibernate的支持方法較多,我常用的是直接繼承HibernateDaoSupport類。我們先來看一個類圖:
          Dao Class Diagram
          在是我在應(yīng)用中常用到的類結(jié)構(gòu)。因為對于一個域模型來說,最基本的就是CRUD操作,所以將其放在Dao接口中,但是對于每個不同的域模型又有其特有的方法,則將其放在域模型對應(yīng)的接口(SomeSpecificDao)中。
              這樣,對于最基本的CRUD操作就可以只需在BaseHibernateDao中實現(xiàn),這一點利用了Template Method設(shè)計模式。對于create(), delete()和modify()三個方法都可以簡單實現(xiàn),即調(diào)用HibernateTemplate中相應(yīng)的方法。對于findAll和findById,則可以借住Java的反射來實現(xiàn)。這里如果要利用反射且達(dá)到通用的目的,就需要將所有的域模型放在一個包中,并且有相同的命名規(guī)則,比如說如果域模型叫做User,那么相應(yīng)的Dao應(yīng)該以User開頭,不過這也是常用的方法。下面給出一小段代碼
          /**
               * 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的實現(xiàn),findById也是一樣。這樣一來,就無需再在子類中重復(fù)編寫CRUD算法的實現(xiàn)了。
               再有就是在編寫子類Dao中特有的find方法,因為利用HibernateTemplate中的execute方法來實現(xiàn),所以可以在BaseHibernateDao這個父類中編寫一個protected的方法,以便子類Dao調(diào)用,這個方法中包含了調(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方法來實現(xiàn),而不必每次都編寫繁瑣的execute方法。
               以上的方法我都做過測試,在實現(xiàn)和應(yīng)用中沒有問題。在效率上可能會比在子類中實現(xiàn)要差一點,因為find*方法中用到了Java的反射,對效率會一定的影響,這是缺點之一。如果有哪位有更好的辦法,請在評論中寫出,歡迎大家進行評判,謝謝……

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

              不知道自己為什么會如此癡迷于Java,或者更應(yīng)該說是編程。現(xiàn)在已經(jīng)大三了,有了兩年多的Java經(jīng)驗,雖然不長,但學(xué)到的東西很多。這主要歸功于對Java的熱愛還有我的英語。嘿嘿,本人初中在英國年的,所以英語還算不錯,看文檔和書籍都是英文原版的,所以得到的信息更多。

              剛到大學(xué)時對編程一無所知。大學(xué)里教的語言是C++,剛接觸時死活都弄不明白指針,每次編程時都回遇到這樣和那樣的指針問題,最常見的就是指針為空的情況,郁悶至極。大概是大二上學(xué)期某個時候,突然在圖書館看到關(guān)于Java的書籍,看了幾頁就已經(jīng)著迷了。接著的兩年多里,我不斷的學(xué)習(xí)Java,從最開始的環(huán)境變量的配置(大家必須承認(rèn),這是Java初學(xué)者的最大問題),到現(xiàn)在已經(jīng)熟悉J2EE(Java EE),包括目前流行的Web框架和一些比較有用的開源工具,比如Ant、JUnit、WebUnit的等等。

              我買的第一本Java書是Deitel兩人寫的“Java How to Program”。我很慶幸買了這本書,這是本很好的初學(xué)書籍,所以現(xiàn)在如果有人問我剛開始學(xué)Java應(yīng)該用什么書,我會推薦他這本,當(dāng)然前提是要看得懂英文。之后又隨之買了Java Advanced How to Program,雖然這本書是老了一點,但是也很有用,給我奠定了較好的J2EE基礎(chǔ)。

              學(xué)習(xí)J2EE大概是在我接觸Java一年多后開始的,那時我對開源還不懂,所以以為J2EE只有Servlet、EJB和JSP。之前我一直使用的是Ant和Editplus,現(xiàn)在有時也用,Ant確實是一門非常好的工具。做J2EE開發(fā)就不能只使用Ant了,我回抓狂的。IDE最開始我選擇了Netbeans,剛開始覺得很好用,很方便,但隨著我做的東西的規(guī)模變大,機器就開始卡了(Netbeans很消耗內(nèi)存的)。之后在網(wǎng)上看到Eclipse很流行,便下下來用,就用到了現(xiàn)在。

              目前最遺憾的是我沒有找到機會去做項目,只是自己做網(wǎng)站,學(xué)習(xí)而已。不過這樣有個好處就是沒人限制你,所以你可以盡情發(fā)揮,可以去探索的更加透徹,有時間去想。因為還在學(xué)習(xí)階段,所以我一直沒有把網(wǎng)站放到網(wǎng)上,我喜歡把我學(xué)過的技術(shù)和我自己想出來的模式都網(wǎng)自己的網(wǎng)站上加,以得到實踐。目前我是這樣的:用Spring作為中間層管理資源、DAO、Service等;與數(shù)據(jù)庫打交道我當(dāng)然就選擇的Hibernate;前端我用了Struts和JSF,覺得他們各有利,Struts主要接收和處理表單,JSF用來作為View Helper生成頁面;視圖我還是用的JSP,但是用了Sitemesh進行裝飾。開始用的Tiles,但后來發(fā)現(xiàn)Tiles配置起來很麻煩,而且限制很多;我還用了兩個小的開源組件,Ajaxtags和Displaytag,知道這兩個東西的人應(yīng)該都知道我用它來干嘛的,就不說了;安全方面我目前使用的AcegiSecurity,挺好用的,不過如果要求安全性更高,我還需要手工編碼;模版技術(shù)我現(xiàn)在使用Freemarker,因為使用Velocity我總是配置不成功(偷懶)。現(xiàn)在我主要在琢磨如何簡化代碼,現(xiàn)在的結(jié)構(gòu)都是我自己摸索出來的,后來下了Appfuse,發(fā)現(xiàn)它的結(jié)構(gòu)竟然和我?guī)缀跻粯樱ol
              說說未來吧,我已經(jīng)大三了,還有一年就要畢業(yè),我準(zhǔn)備出國。開始準(zhǔn)備去英國,因為環(huán)境熟悉,還選了一所英國計算機排名第三的“帝國理工(Imperial College)”。去英國就要考雅思。后來大家還是推薦我去美國,畢竟美國在計算機方面是老大。我又看中了卡耐基·梅隆,這所學(xué)校就不用介紹了吧,李開富的母校~~~~ 去美國要考托福和GRE。這下我三門都要考,托福和雅思我不怕,托福我剛做了套2003年的卷子,只錯了4道題,也許有一點運氣吧,但應(yīng)該還算不錯了。最怕的就是GRE,聽說有些人因為GRE出了家,恐怖啊。我也漸漸感覺到了GRE的難度。
              我是前幾天剛注冊的,看到“哈哈的日子”寫的東西,感覺很溫馨。本人還沒有女朋友,屬于“圣”男(剩下來的男人)哈哈……能夠找到一個能夠理解程序員的另一半也是我的未來。我總是在說“我目前最快樂的事情就是能夠為自己的夢想而奮斗,也許會跌倒,也許會報怨,但那些都是這條路上所固有的”。我快樂!

          posted @ 2006-03-05 14:07 舉止優(yōu)雅的豬 閱讀(1199) | 評論 (10)編輯 收藏

          主站蜘蛛池模板: 宜兰市| 温宿县| 五常市| 时尚| 集贤县| 玛多县| 清涧县| 新晃| 佛坪县| 忻城县| 井冈山市| 甘孜县| 平远县| 铜鼓县| 黑山县| 台东市| 临海市| 闵行区| 新兴县| 瓦房店市| 武定县| 馆陶县| 博罗县| 台北县| 武宁县| 黔江区| 高邑县| 唐河县| 弥渡县| 普定县| 孝义市| 介休市| 新密市| 清流县| 黄大仙区| 莎车县| 瑞丽市| 鄄城县| 杭锦后旗| 洛浦县| 汉源县|