linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘网络学院网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > 开发语言 > JAVA >
栏目导栏
  php
  JSP
  ASP
  asp.net
  JAVA
  c/c++/c#
  perl
  JavaScript
  Basic
  Delphi
资料搜索
热门文章
·Ajax实现在textbox中模糊查询显
·Ajax实现分页查询
·JAVA反编译工具jad的简单用法
·基于Spring+Hibernate+Eclip
·java定时执行的三种方法
·读取数码照片中的Exif信息
·JSP获取客户端的浏览器和操作系
·Java文件操作大全
·Java中利用通讯API编写短信软件
·JAVA技术:上传图片的缩放处理
·利用Java实现网页浏览器
·Java编程基础
·Java调用Oracle的过程和函数
·JAVA得到网卡物理地址(Windows
·NetBeans vs Eclipse之性能参数
最新文章
·实例解析:Linux操作系统下Jav
·JAVA得到网卡物理地址(Windows
·Ajax实现在textbox中模糊查询显
·Ajax简单示例之改变下拉框动态
·AJAX如何与后台交互
·Ajax实现分页查询
·Ajax核心:XMLHTTP组件相关技术
·面向Java程序员的Ajax:构建动态
·JSP获取客户端的浏览器和操作系
·提高Java技能的几种简单有效的
·敏捷开发中需掌握移除重复代码
·Java中利用通讯API编写短信软件
·关于String和StringBuffer
·用Java得到硬盘空间
·如何优化JAVA程序设计和编码,
Google
 
基于Spring+Hibernate+Eclipse进行敏捷Java开发
[ 作者:  加入时间:2007-10-25 13:13:43  来自:Linux联盟收集整理 ]

本文与其它典型的Java文章有所不同,这主要体现在两个方面。首先,我们没有深入讨论有关于一些API或优秀工具的细节,而是提供了使用敏捷方法和普通Java对象(POJO)构建企业级Java应用程序的一个指南。其次,本文中涉及到大量的从概念到工程发布等多方面的基本内容。因此,为了简洁起见,本文中仅提供了极少的代码摘录;然而,本文还提供了一个基于SpringHibernateJunitAnt构建的完全可运行的示例时间表应用程序(并有相应的源代码)供您参考。

现在,让我们言归正传。

二、敏捷宣言

2001年,17位软件专家(包括Martin FowlerKent BeckJon Kern)聚集到一起共同探讨有关软件开发的轻量级途径;最终,他们联合定义了术语敏捷并发出了敏捷软件开发宣言”—为这些敏捷方法提供了一组参考值和原则。

术语敏捷中融入了大范围的多种方法;其中一些包括极限编程(XP)Scrum,特征驱动开发,敏捷建模以及Crystal。而且,这其中的许多方法都倾向于至少包括过程和建模两个方面(因为它们经常联系在一起);接下来,我们将逐一展开讨论。而有关敏捷宣言和各种敏捷方法的更多细节,请访问  

1Scrum敏捷过程简要描绘

敏捷过程的一个普通主题就是迭代性开发。例如,尽管XP的工作就象Scrum一样工作,但是它使用了基于每周一次的迭代的季度发行的概念(如图2所示)。还该特征are提供in该表单of用户故事,典型地是由客户使用一到三行语句来描述一下相应的特征。我在此对XP的解释可能过分简化;其实,关于XP还有其它大量内容,例如结对编程(pair programming),共同讨论(sit together)与持续构建(continuous build)等。有关于XP的更多细节请访问网站extremeprogramming.org

至此,我们已经简单分析了解了两种敏捷过程:ScrumXP。这些内容极有助于收集用户特征请求并有助于整个工程管理。然而,作为开发者,我们需要把这些特征实现到应用程序中。因此,接下来,让我们了解一下敏捷建模技术,这可能有助于我们建立用户需求和编码之间的桥接

 

2XP敏捷过程简要描绘

四、敏捷设计

根据来自thefreedictionary.com网站的定义,模型是一种初步的作品,最终的产品将基于之进行制作……也用于测试或完善一个最终的产品。因此,本文中我将使用模型一词来描述图表及其它人为绘制内容。

敏捷模型驱动开发

Scott Ambler创建的敏捷模型驱动开发(AMDD)为进行有效的建模提供了指南。不是创建广泛的模型,AMDD推荐创建足够好的模型。我最喜欢的Scott的一句话就是你的目标是构建一种共同的理解而不是编写一篇详细的文档。

AMDD建议使用两种类型的模型:需求(requirements)和架构(architecture)。需求模型有域模型(考图3)、用法模型(例如用户故事/用例,参考图4)以及UI模型(例如原型和流程图,分别参考图5和图6)等。

 

3:域模型

 

4:用法模型

 

5:原型形式的UI模型

 

6:流程图形式的UI模型

 

7:架构模型中的自由形式(freeform)的模型

架构模型中可以包括一种自由形式的模型,如图7所示。

有关于AMDD并没有太多的资料可循,因为它仅为敏捷建模提供了最小的指南。有关于敏捷建模的更多细节,请访问网站agilemodeling.comKbvLinux联盟

敏捷绘图

在继续下面的讨论前,请允许我简短地介绍一种新颖而相当简单的技术敏捷绘图;我正是借助于它绘制了上面的图37。这一技术成为略显笨重的统一建模语言(UML)的一种替代,但是也可以用于补充UML。敏捷绘图为建模提供了最小指南,同时增加了对基于图形设计概念设计这些模型的吸引力。敏捷绘图背后的核心概念包括了四个基本组件(圆、矩形、线及文本),它们使敏捷绘图成为一种事实上可以自由标志的建模技术。通过这四种概念,你几乎能够手工(或借助于一种绘图程序)绘制出任何模型。

更多的细节请访问网站agiledraw.org

重构

敏捷方法的一个核心内容就是,它不推荐一开始就进行过多的设计而使你能够尽快地向顾客展示实际软件的开发结果这与编写全面细致的实际上没有人会读或维护的文档的方法形成对照。当然,其缺点在于,它减少了程序开发过程中的设计量。然而,这也未必是一件糟糕的事情,因为对于大多数程序员来说,一旦他们开始编码就会找到更好的解决问题的办法。

例如,在对问题进行第一遍加工之后,我们往往能够找到更为简洁的构建我们的代码的方法或者是通过改进我们自己的设计或者是因为我们学到了一种更好的使用一种框架(例如HibernateSpring)的方法。

这种代码改进技术被称作重构,被认为是一种连续的设计活动。

重构并非无足轻重;如今它出现在许多的集成开发环境(例如EclipseIntelliJ IDEA)的菜单选项中。在此,我建议您访问Martin Fowler的网站—refactoring.com以更多地了解有关重构的信息;当然,其中还提供了大量的与重构相关的技术介绍。

其它设计考虑

尽管重构能够有助于代码改进,但是,可能还有其它许多的内容需要你首先考虑;其中包括设计事务管理模式,异常处理,设计簇方案,还有应用程序安全(认证,授权和加密)等。任何没有考虑这些重要因素的企业级工程很可能会在后期遇到各种麻烦。在XP工程开发中的一个普通问题就是,应该尽最大努力避免把大量的问题留待后期去重构。即使是绘制如图7所示的极其简略的架构模型也能有助于解决在此所列出的诸多重要的设计问题。

五、敏捷Java开发

现在,既然我们已经讨论完敏捷过程与建模,那么接下来,让我们开始讨论编码的问题。然而,在正式开始编码前,搭建适当的开发环境是相当重要的。因此,在开始讨论HibernateSpring及其它技术前,让我们来首先分析一下搭建开发环境的问题。

建立环境—JDKAntJUnit与版本控制

在正式进行开发Java应用程序之前,需要准备一些小工具,例如Java标准版开发包,一个构建工具(例如Apache Ant),一个重要的敏捷开发工具,一个单元测试框架(例如JUnit)等。

Apache Ant

Ant通常用于构建Java应用程序,然而,它并不仅仅是一个构建工具。例如,其它一些常见的Ant任务还包javaccopydeletemovejunitcvsftpmailexecsleep—所有这些功能都可分别用于从文件管理到代码编译再到发送电子邮件等各个方面。你甚至还能够使用它来编写你自己的定制标签;另外,还存在大量可用的开源和商业Ant任务。

有关于Ant的更多细节,请访问网站ant.apache.org

JUnit与测试驱动开发(TDD)

Erich GammaKent Beck最早实现了JUnit框架。这个框架中的JUnit类提供了许多断言方法(例如,assertTrueassertNull),这些断言有助于你测试期望结果。JUnit是一个简单而强有力的单元测试框架工具。当把它与测试驱动开发(TDDtestdriven.com,由Kent Beck创建的一种方法)相结合时,这个框架能够极大地帮助你编写更好、更清晰、更稳定的代码。据TDD建议,在你编写实际的代码之前要先编写相应的测试代码这是一种根本性的思想转变,但是我强烈推荐你对它作进一步的研究。

有关于JUnit的更多细节请访问网站junit.org

版本控制、命名标准及其它

最后,为了使一个开发团队高效地开展工作,很有必要建立一个开发目录结构,确定类/文件命名约定定义,以及确定所使用的版本控制软件(例如CVS所有这些都是应该预以考虑的关键步骤。

六、基于Hibernate进行数据层开发

关系数据库与面向对象技术已经出现一段时间了,而且看上去它们的未来也完全可以预测。假定在典型情况下Java开发者使用这两种技术进行工作,那么,他们经常使用JDBC来编写数据存取对象(DAO)中的映射代码从而实现数据存取典型情况下,数据的来回传递是借助于数据传输对象(DTO)实现的。作为使JDBC的另一种替代方法是使用EJB实体bean;然而,在EJB 3.0之前,这一直被认为是一种笨拙的方它们都是远程对象。那么,如果你想使用POJO通过一种敏捷方法来实现Java持久性存储,该怎么办呢?答案是借助于例如Hibernate这样的一种ORM框架。

对象关系映射(ORM)代码消除了手工编写JDBC调用的需要,从而使你在XML文件中完成映射,然后简单地以POJO方式来操作数据库记录。Hibernate是一个流行的ORM框架,在Java开发社区中广泛使用。事实上,由于它的流行性,EJB 3.0规范的研发中非常紧密地参考了Hibernate模型。

Hibernate支持大量关系数据库(通过它的dialect)。为了使用这个框架,我们首先需要配置数据库连接典型地,这是在一个称为hibernate.cfg.xml的文件中实现的。然后,在典型情况下,针对使用的每一个表格,我们都把它们映射到一个相应的Java类。例如,下面一行代码展示了一个针对一个名为Department的表格的映射(完整的代码位于Department.hbm.xml文件),它实现把这个表格映射到一个名字也叫DepartmentJava类。

<class name="com.visualpatterns.timex.model.Department"KbvLinux联盟
table="Department">

下面这一行代码则展示了针对数据库表格中几个列的映射。其中,departmentCode是一个主键(以数据库术语),而用Hibernate/ORM术语来说则是一个唯一对象标识符:

<id name="departmentCode" column="departmentCode">KbvLinux联盟
<property name="name" column="name"/>

一旦配置好数据库和映射关系,我们就可以简单地从一个SessionFactory中取得一个Hibernate会话(实质上是一个JDBC数据库连接),并以一个Java对象方式来操作记录数据。下面的代码展示了这一点(该代码使用一个值为“IT”departmentCode取回一个Department记录):

Session session = sessionFactory.getCurrentSession();KbvLinux联盟
department = (Department) session.get(Department.class
"IT");

你可能已经猜出,Hibernate还提供方法用于保存和删除数据库记录(对象)。这其中的方法包括saveloadgetupdatemergesaveOrUpdatedelete等。

Hibernate的一个最强有力的特征之一是它的Hibernate查询语言(HQL)。这是一个类SQL语言而且功能十分强大,它支持例如连接、聚合函数、参数替代、表达式和排序等许多功能。下面展示了一个极其简单的示说明如何从Department表格中提取一个对象列表:

departmentList =session.createQuery("from Department ORDER BY name")KbvLinux联盟
.list();

然而,我们在此仅触及到一些皮毛,因为Hibernate还提供了其它许多特征,例如记录锁定、关联、本地查询、存储过程支持、拦截器和过滤器,等等。

有关Hibernate的更多细节,请访问网站hibernate.orgKbvLinux联盟
Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论

分页:[1] 2
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·Java开发中的事件驱动模型实例详解  (2007-10-25 12:28:55)
 ·面向Java开发人员的Ajax:Java对象序列化  (2007-10-24 15:13:32)
 ·如何在Linux系统下配置Java开发环境  (2007-05-14 09:30:34)
 ·在Ubuntu搭建java开发环境  (2007-02-20 13:39:00)
 ·PL/SQL和Java开发Oracle8i应用程序  (2006-12-31 12:05:20)
 ·Java开发使用Oracle数据库的注意事项  (2006-12-07 11:11:20)
 ·Java开发源码如何在项目中深入运用  (2006-11-07 10:45:00)