posts - 3, comments - 13, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

2006年3月5日

     摘要: 该文主要介绍了一个我和同学合作的项目,使将非结构化流程图转换成结构化流程图的程序。  阅读全文

posted @ 2006-06-03 12:11 举止优雅的猪 阅读(2631) | 评论 (1)编辑 收藏

在暑假里看了“Refactoring to Patterns”这本书,觉得很不错。里边讲到了很多在优化编码时可以用到的设计模式以及它们的用法。
    我在编程时,一般都是用Spring作为中间层管理资源,而用Hibernate作为ORM。用过Spring的人都知道Spring对Hibernate的支持方法较多,我常用的是直接继承HibernateDaoSupport类。我们先来看一个类图:
Dao Class Diagram
在是我在应用中常用到的类结构。因为对于一个域模型来说,最基本的就是CRUD操作,所以将其放在Dao接口中,但是对于每个不同的域模型又有其特有的方法,则将其放在域模型对应的接口(SomeSpecificDao)中。
    这样,对于最基本的CRUD操作就可以只需在BaseHibernateDao中实现,这一点利用了Template Method设计模式。对于create(), delete()和modify()三个方法都可以简单实现,即调用HibernateTemplate中相应的方法。对于findAll和findById,则可以借住Java的反射来实现。这里如果要利用反射且达到通用的目的,就需要将所有的域模型放在一个包中,并且有相同的命名规则,比如说如果域模型叫做User,那么相应的Dao应该以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的实现,findById也是一样。这样一来,就无需再在子类中重复编写CRUD算法的实现了。
     再有就是在编写子类Dao中特有的find方法,因为利用HibernateTemplate中的execute方法来实现,所以可以在BaseHibernateDao这个父类中编写一个protected的方法,以便子类Dao调用,这个方法中包含了调用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中就可以直接调用该find方法来实现,而不必每次都编写繁琐的execute方法。
     以上的方法我都做过测试,在实现和应用中没有问题。在效率上可能会比在子类中实现要差一点,因为find*方法中用到了Java的反射,对效率会一定的影响,这是缺点之一。如果有哪位有更好的办法,请在评论中写出,欢迎大家进行评判,谢谢……

posted @ 2006-03-09 10:36 举止优雅的猪 阅读(1037) | 评论 (2)编辑 收藏

    不知道自己为什么会如此痴迷于Java,或者更应该说是编程。现在已经大三了,有了两年多的Java经验,虽然不长,但学到的东西很多。这主要归功于对Java的热爱还有我的英语。嘿嘿,本人初中在英国年的,所以英语还算不错,看文档和书籍都是英文原版的,所以得到的信息更多。

    刚到大学时对编程一无所知。大学里教的语言是C++,刚接触时死活都弄不明白指针,每次编程时都回遇到这样和那样的指针问题,最常见的就是指针为空的情况,郁闷至极。大概是大二上学期某个时候,突然在图书馆看到关于Java的书籍,看了几页就已经着迷了。接着的两年多里,我不断的学习Java,从最开始的环境变量的配置(大家必须承认,这是Java初学者的最大问题),到现在已经熟悉J2EE(Java EE),包括目前流行的Web框架和一些比较有用的开源工具,比如Ant、JUnit、WebUnit的等等。

    我买的第一本Java书是Deitel两人写的“Java How to Program”。我很庆幸买了这本书,这是本很好的初学书籍,所以现在如果有人问我刚开始学Java应该用什么书,我会推荐他这本,当然前提是要看得懂英文。之后又随之买了Java Advanced How to Program,虽然这本书是老了一点,但是也很有用,给我奠定了较好的J2EE基础。

    学习J2EE大概是在我接触Java一年多后开始的,那时我对开源还不懂,所以以为J2EE只有Servlet、EJB和JSP。之前我一直使用的是Ant和Editplus,现在有时也用,Ant确实是一门非常好的工具。做J2EE开发就不能只使用Ant了,我回抓狂的。IDE最开始我选择了Netbeans,刚开始觉得很好用,很方便,但随着我做的东西的规模变大,机器就开始卡了(Netbeans很消耗内存的)。之后在网上看到Eclipse很流行,便下下来用,就用到了现在。

    目前最遗憾的是我没有找到机会去做项目,只是自己做网站,学习而已。不过这样有个好处就是没人限制你,所以你可以尽情发挥,可以去探索的更加透彻,有时间去想。因为还在学习阶段,所以我一直没有把网站放到网上,我喜欢把我学过的技术和我自己想出来的模式都网自己的网站上加,以得到实践。目前我是这样的:用Spring作为中间层管理资源、DAO、Service等;与数据库打交道我当然就选择的Hibernate;前端我用了Struts和JSF,觉得他们各有利,Struts主要接收和处理表单,JSF用来作为View Helper生成页面;视图我还是用的JSP,但是用了Sitemesh进行装饰。开始用的Tiles,但后来发现Tiles配置起来很麻烦,而且限制很多;我还用了两个小的开源组件,Ajaxtags和Displaytag,知道这两个东西的人应该都知道我用它来干嘛的,就不说了;安全方面我目前使用的AcegiSecurity,挺好用的,不过如果要求安全性更高,我还需要手工编码;模版技术我现在使用Freemarker,因为使用Velocity我总是配置不成功(偷懒)。现在我主要在琢磨如何简化代码,现在的结构都是我自己摸索出来的,后来下了Appfuse,发现它的结构竟然和我几乎一样!lol
    说说未来吧,我已经大三了,还有一年就要毕业,我准备出国。开始准备去英国,因为环境熟悉,还选了一所英国计算机排名第三的“帝国理工(Imperial College)”。去英国就要考雅思。后来大家还是推荐我去美国,毕竟美国在计算机方面是老大。我又看中了卡耐基·梅隆,这所学校就不用介绍了吧,李开富的母校~~~~ 去美国要考托福和GRE。这下我三门都要考,托福和雅思我不怕,托福我刚做了套2003年的卷子,只错了4道题,也许有一点运气吧,但应该还算不错了。最怕的就是GRE,听说有些人因为GRE出了家,恐怖啊。我也渐渐感觉到了GRE的难度。
    我是前几天刚注册的,看到“哈哈的日子”写的东西,感觉很温馨。本人还没有女朋友,属于“圣”男(剩下来的男人)哈哈……能够找到一个能够理解程序员的另一半也是我的未来。我总是在说“我目前最快乐的事情就是能够为自己的梦想而奋斗,也许会跌倒,也许会报怨,但那些都是这条路上所固有的”。我快乐!

posted @ 2006-03-05 14:07 举止优雅的猪 阅读(1175) | 评论 (10)编辑 收藏