J2EE架构设计


1 ©中国科学院软件所 2006 Slide 1 J2EE架构设计 ©中国科学院软件所 2006 Slide 2 议题 1、介绍实例架构 z 结合实例讲解Web项目总体结构 z 分析多层结构优点 z 具体讲解每个层次的实现技巧 2 ©中国科学院软件所 2006 Slide 3 议题 2、介绍组织层次关联利器(Spring) z 快速入门 z Factory模式 z IOC模式 z AOP模式 z 演练Spring的威力 ©中国科学院软件所 2006 Slide 4 议题 3、介绍日志管理利器(Log4j) z 快速入门 z 演练Log4j的优越性 3 ©中国科学院软件所 2006 Slide 5 议题 4、介绍UI层利器(Struts) z Struts介绍 z 快速入门 z ActionFrom z Action z 客户端验证 ©中国科学院软件所 2006 Slide 6 议题 5、介绍数据持久层利器(HIbernate) z 快速入门 z 介绍辅助工具 z 表与表之间关联操作 z 多数据库操作 z 事务管理 z DAO模式 z 与Spring结合使用 4 ©中国科学院软件所 2006 Slide 7 议题 6、介绍软件测试与部署 z 借助Junit的单元测试 z 借助Ant的自动部署 ©中国科学院软件所 2006 Slide 8 实例架构 5 ©中国科学院软件所 2006 Slide 9 层次介绍 实例分为四层: z 通过Struts实现UI层 z 通过Spring实现业务层 z 通过Hibernate实现数据持久层 z 传输于各层的域对象层 ©中国科学院软件所 2006 Slide 10 结构优点 z 通过成熟的开源产品搭建层次清晰性能稳定的系统架构。 z 层与层之间松散耦合,增加代码重用率,提高开发效率。 z 每一层充当各自具体任务,便于团队分工和后期维护。 z 稳健的架构能承受业务的扩展,不至于使项目失控。 6 ©中国科学院软件所 2006 Slide 11 UI Layer z UI是User Interface的缩写,这一层是面向用户的 界面,充当与用户互动的角色。即接受用户请求 作出响应。实现这一功能最佳经验即MVC模式, 实例中该层借助Struts实现,Struts本身就是 MVC思想的产物。 ©中国科学院软件所 2006 Slide 12 UI Layer z Struts提供ActionFrom来封装与用户互动的数据元素。 z Struts提供Action来接受用户请求与发生响应动作。 z Struts提供ValidatorPlugIn来进行UI验证。 7 ©中国科学院软件所 2006 Slide 13 Business Layer z 具体的业务逻辑通常导致代码的高度耦合,因此我们将业 务逻辑分为单独的一层,其目的也是希望通过层,来降低 它与系统其他部分的耦合度。该层借助Spring可以达到更 好的效果。通过Spring的IOC模式来装配业务组件,如, DAO对象。使系统更具扩展性。通过Spring AOP(面向 方面)思想,来集中处理具体业务,如事务管理,使代码 更为简洁,增加复用,提高开发效率。 ©中国科学院软件所 2006 Slide 14 Persistence Layer z 在传统的系统开发中该层占据大部分的开发时间,且随着 需求的变更功能的修改,逐渐变得难以控制,特别是表结 构的变化可能导致整个系统大动干戈。 z 在实例中我们借助Hibernate,利用其持久化机制和 CRUD封装来减少代码开发量和其他层次的耦合度。 8 ©中国科学院软件所 2006 Slide 15 Domain Layer z 该层应该说是ORM思想的产物,ORM用对象关联数据 表,允许数据表中数据放入对象,也允许对象中数据更 新到数据表,我们将这些对象的集合归为一个专门的层 次即Domain Layer。 z 域对象承担各层之间数据通信的载体。实际上域对象也 是一个完完全全的业务对象,如User对象、Book对象 。通过对业务的对象化,这有利于业务逻辑的重用。 ©中国科学院软件所 2006 Slide 16 系统结构-回顾 z 将系统进行如上的分成,从理论上可以让其承担各自 职责,UI层提供友好的用户交互、业务层处理具体问 题领域逻辑、持久层完成于数据库读取存储、域模型 承担数据传输的载体。 z 将一个复杂的应用领域细分成诸多最小单元,然后进 行串联、组合。使得一个应用领域的实现过程中,最 小单元达到最大复用。 9 ©中国科学院软件所 2006 Slide 17 Spring-简介 z springFramework是种非侵入式轻量级框架,允 许自由选择和组装各部分功能,也提供了和其 他很多软件集成的接口,如与Hibernate、Struts 的集成。 z Spring主要功能有 Dependency Injection、 Spring Context、 Spring AOP、Spring ORM、 Spring DAO、Spring MVC。 ©中国科学院软件所 2006 Slide 18 Spring-为什么使用Spring z 利用延时注入思想组装代码,提高系统扩展性,灵活性, 实现插件式编程。 z 利用AOP思想,集中处理业务逻辑,减少重复代码,构建 优雅的解决方案。 z 利用HibernateTransactionManager类封装Hibernate事务 管理,其是AOP思想的典型运用,使持久层操作代码简洁 精悍。 10 ©中国科学院软件所 2006 Slide 19 Spring-Factory模式 z 在实际开发中会经常用到工厂模式,其完成的功能是使 外部调用类不需关心具体实现类,这样非常适合在同一 个事物类型具有多种不同实现的情况下使用。 z 要实现工厂模式我们必须设计AbstractFactory类 AbstractProduct类,为了实现灵活性还可能用反射机制 构建Product实体。在得到具体实现类的时候也必须通过 工厂类完成,如图所示: ©中国科学院软件所 2006 Slide 20 Spring-Factory模式 11 ©中国科学院软件所 2006 Slide 21 Spring-依赖注入 z Spring的依赖注入能达到工厂模式的同样的效果,但其实 现却优雅很多。看如下代码: z 在Spring配置文件中配置Bean ƒ实现代码:Product a = XXX.getBean(“Product"); ƒ这样即得到了ProductA的实例,代码中只硬编码了Product接 口。是不是让你兴奋了? ©中国科学院软件所 2006 Slide 22 Spring-依赖注入 Spring还允许以下三种方式实现依赖注入: z 设值注入 z 接口注入 z 构造函数注入 12 ©中国科学院软件所 2006 Slide 23 Spring-依赖注入 z 我们重点讲述设值注入方式,先来看看通过设值注入能 给实际开发带来什么好处.下图是不是让你有所领悟? ©中国科学院软件所 2006 Slide 24 Spring-演练 z 我们利用设值注入实现一个简单的计算器,让它实现两 个数的加法或减法运算。类图如下: ƒProduct实现类中与具体实现类无关联、无依 赖,通过外部配置即可自由切换实现类,美妙! 13 ©中国科学院软件所 2006 Slide 25 Spring-依赖注入总结 z 从演练的例子可以看出Spring提供的依赖注入思想能让代 码之间依赖性降低,转而交给配置文件进行外部配置,这 样对于需求变化、后期维护、功能扩展带来便利。 z Spring是一种工具,更是一种思想,开发人员可以在设计 代码时发挥无限想象,挖掘出最适应项目代码组织形式。 ©中国科学院软件所 2006 Slide 26 Spring-AOP模式 z AOP的全称为Aspect Oriented Programming,译为“ 面向方面编程”或“面向切面编程”,与熟悉的OOP(面向 对象编程)思想所关注的目标有本质上的区别,AOP是 针对具体业务领域、业务逻辑;OOP针对业务对象。 z Spring中事务管理机制就是AOP的一个具体运用。 z 利用此机制省去了我们在每个具体实现类中去进行事务 管理的编码,而将这一切交给Spring提供的事务代理实 现类。 14 ©中国科学院软件所 2006 Slide 27 Spring-AOP模式 z 在讲述AOP运用之前我们先来了解下AOP实现原理。 z Spring的Dependency Injection和AOP都是某一设计模 式的经典应用及放大。也许通过Spring的事物管理机制 你已经将AOP的实现原理与代理模式联系在一起了。的 确如此,让我们先看看代理模式的思想。 ©中国科学院软件所 2006 Slide 28 Spring-Proxy z 代理模式的思想是:不让外部直接访问具体目标,而是 通过一个代理类才能访问具体目标。 z 类似在具体目标与外部之间放置一道“隔离层“,所有与具 体目标的通信均需通过这道”隔离层”来传送请求和返回状 态。这样“隔离层“就能掌控访问具体目标的前前后后。 z 如果我们需要在访问具体目标前或后加上一致的处理逻 辑,无疑代理模式最为适合。就如事物管理。 15 ©中国科学院软件所 2006 Slide 29 Spring-Proxy z 下面演练用Proxy模式来实现JDBC事务管理, 先看图: 先编写Dao接口,让所有访问数据库的类和代理类都继承该接口,然后 在代理类中传入要访问的具体类。这样就能通过代理类完成对具体 实例的访问。 ©中国科学院软件所 2006 Slide 30 Spring-Proxy 16 ©中国科学院软件所 2006 Slide 31 Spring-Proxy ©中国科学院软件所 2006 Slide 32 Spring-Proxy z 从DaoImpl类中代码可以看出我们没有编写事务的控制代 码,而是转交给代理类完成,这样访问数据库的具体类不 需要自己关心事务处理。让某一业务逻辑集中实现,能避 免重复编写代码,方便修改和维护。 z 上面的例子有两个缺陷 1.局限一个相同的方法名。 2.代理类继承一个具体接口,即使有类似功能的类,当接口改变, 需新建继承其接口的代理类。 17 ©中国科学院软件所 2006 Slide 33 Spring-Proxy z 上面例子的缺陷可以通过Java的反射机制动态创建实例、 方法得到解决。通过该思想,JDK1.3以上版本实现了动态 代理(Dynamic Proxy)。 z 说到这里也许你已经明白Spring Aop机制是基于 Dynamic Proxy来实现的。 z 下面让我们来看看通过Spring Aop怎样来实现事务管理。 ©中国科学院软件所 2006 Slide 34 Spring-AOP 利用事务管理的例子,我们分析下AOP的概念: z 方面(Aspect) z 连接点(JoinPoint) z 通知(Advice) z 切入点(PointCut) z 目标对象(TargetObject) 18 ©中国科学院软件所 2006 Slide 35 Spring-AOP ©中国科学院软件所 2006 Slide 36 Spring-AOP 19 ©中国科学院软件所 2006 Slide 37 Spring-AOP z 方面:我们将业务组件的事务管理部分提取出来,被提取的 层面就称为“方面“,如图中的事务管理。方面的意义在于将 业务逻辑中复杂问题分离成不同层面,使其实现统一集中的 管理。 z 连接点:程序在执行过程中明确的点,如execute()方法。 z 通知:在特定的连接点执行的动作。如在执行execute()方法 前的预处理,在执行完execute()方法后的后处理。 ©中国科学院软件所 2006 Slide 38 Spring-AOP z 切入点:连接点的集合,指定在何时引发通知。如事务 例子中配置了所有execute.*的方法为切入点。 z 目标对象:包含连接点的对象,也称为被代理的对象。 如图中的业务组件。 20 ©中国科学院软件所 2006 Slide 39 Spring-AOP z 下面我们结合实例项目,看看借助Spring为程序 结构、代码组织、业务处理所带来的优越。 ©中国科学院软件所 2006 Slide 40 Spring-思考 z 在实际项目中哪些业务需求适合借助AOP思想 实现? 21 ©中国科学院软件所 2006 Slide 41 Log4j-介绍 z log4j是用于java语言的日志记录工具,一个完整的软件, 日志是必不可少的。项目开发中日志记录多种多样,有 打印在控制台中,有记录成文本文件,有保存到数据库 中等。 z 日志信息也许需要分为调试日志,运行日志,异常日志 等。这些虽然实现简单,但是也繁琐。下面将介绍用 log4j来实现日志记录。 ©中国科学院软件所 2006 Slide 42 Struts-介绍 Struts是用于实现Web项目中UI层的开源产品,是MVC模 式的经典实现案例。它属于Apache组织中的开源产品之一 ,之所以使用Struts: z Struts将业务数据、页面显示、动作处理进行分离,这有利 各部分的维护 z Struts采用Front Controller模式来实现动作处理,让所有的 动作请求都是经过一个统一入口, 然后进行分发。这样方 便我们在入口中加入全局控制代码的实现,如安全控制、 日志管理、国际化 编码等 22 ©中国科学院软件所 2006 Slide 43 Struts-介绍 z 通过Struts提供的ActionForm封装web form 中的元素, 使重用web表单成为可能 z 借助Struts Validator框架帮助完成web层的验证工作, 通常情况下我们不用再去为每个web页面写其验证代码 ,只需通 过配置即可实现。这也减少了我们的开发量, 由于验证代码的集中管理,也为维护带来便利 ©中国科学院软件所 2006 Slide 44 Hiernate-介绍 z 对象到关系型数据映射(ORM)是架构中热门的 话题,人们希望用ORM工具从单调的SQL中解脱 出来, 规范数据层的开发,提高开发效率。 Hibernate也是实现这样的功能。Hibernate性能 稳定、参考文档齐全,有专门的组织提供升级与 技术支持。 23 ©中国科学院软件所 2006 Slide 45 Hiernate 下面我们将以此介绍关于Hiernate的如下运用: z 表与表之间关联操作 z 多数据库操作 z 事务管理 z DAO模式 z 与Spring结合使用 z 辅助功能介绍 ©中国科学院软件所 2006 Slide 46 Hibernate-one-to-one 一对一关联有两种方式: z 主键关联 主键关联不需借助外部字段,直接通过两个表的主键 关联,因此必须保证两个表的主键值一致。通常借助 foreign标识符生成器策略。 z 唯一外键关联 在主动方加入外键进行关联,这样主动方与被动方的 影射关系实际上就成了多对一的关联。 24 ©中国科学院软件所 2006 Slide 47 Hibernate-DAO模式 在业务类中既写逻辑,又写与底层存储媒介交互代码,使业 务类变得复杂,且不便于维护,因此我们用DAO模式将业务 逻辑与底层存储媒介交互分离,DAO的英文全称为Data Access Object。从实例的架构图中可以看出,DAO充当业 务层与持久层的交互入口。 ©中国科学院软件所 2006 Slide 48 Hibernate-DAO模式 假设实现一个用户信息添加、修改、删除、查找 的功能。我们将这些调用持久层CRUD的操作, 封装在DAO对象中;将接收UI数据、逻辑判断封 装在业务管理类中。其代实现码如下: 25 ©中国科学院软件所 2006 Slide 49 Hibernate-事务管理 Hibernate中事务管理分为两种: z 基于JDBC的事务管理,简单封装了JDBC的事务管理, 因此其作用范围在当前JDBC连接中,也就是说只能在当 前Session中有效。 z 基于JTA的事务管理,利用容器管理,可以跨越多个 Session。 ©中国科学院软件所 2006 Slide 50 软件测试与部署-Ant z Ant是一个自动构建工具,但其功能不仅仅是限于构建工 作,很多工具都有支持Ant的任务接口,如Junit、 Xdoclet等。我们可以通过配置文件制定一系列任务,使 其批量执行。比如我们每天开发完代码后要做如下的工 作:编译代码-执行单元测试-发送测试报告-版本管理-打 包部署-发布新版本。 z Ant的使用简单而灵活,我们可以制定具体目标、任务和 其执行的先后顺序。接下来,我们结合实例介绍Ant的使 用。
还剩24页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 15 金币 [ 分享pdf获得金币 ] 6 人已下载

下载pdf

pdf贡献者

phylong

贡献于2011-08-30

下载需要 15 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf