JEE架构.ppt
- 文档编号:1396929
- 上传时间:2022-10-22
- 格式:PPT
- 页数:69
- 大小:1.17MB
JEE架构.ppt
《JEE架构.ppt》由会员分享,可在线阅读,更多相关《JEE架构.ppt(69页珍藏版)》请在冰豆网上搜索。
JavaEE架构,J道(J)彭晨阳,可伸缩性,没有一个固定解决方案适合大中小所有规模系统,但是小型系统的架构必须将来能够平滑过渡到大型系统,而不是推倒重来。
随着网络用户访问量增加,需要能够通过不修改太多软件,而能够进行廉价的、无天花板的、动态的、灵活的部署达到规模效应。
伸缩性种类,垂直:
通过增加单机性能,比如tunning数据库、JVM、操作系统和服务器,增加内存缺点:
天花板和单点风险水平:
分布式集群云计算,通过横向扩展提高高性能。
伸缩性考量重点。
如何达到可伸缩性目标,OO细分是达到可伸缩性目标的正确方式。
Partitioneverything:
切分任何事情包括业务领域知识)Asynchronyeverywhere:
在程序中任何可能地方引入异步。
Embraceinconsistency:
积极面对不一致性Remember,everythingfails:
单点风险,也就是提高可靠性,使用冗余策略,松耦合设计,松耦合设计是软件编程设计的目标,只有实现了分离,松散耦合,我们才能在分离之处引入负载平衡,引入异步。
GoF设计模式是学习松耦合设计的标准课程。
多层架构是松耦合设计的总体方向。
C/S架构缺点,以Delphi/VB等语言开发的C/S架构缺点:
虽然也采取客户端和服务器端分离,但是客户端通常包含界面功能以外,还有业务逻辑部分,服务器端只是数据存储数据库。
新型的C/S架构特点是:
胖客户端虽然也是由Delphi/Swing/J2me等组成,但是胖客户端只包含界面UI显示部分,业务逻辑在服务器端运行。
多层架构的诞生,原始JavaBeans中间件架构,原始JavaBeans架构缺点,设计问题:
容易退回到传统过程化设计编程思路,进而使用基于面向数据表分析设计方法。
代码质量:
容易导致jsp中写入大量Java代码,带来调试困难和难于维护和扩展,丧失灵活性。
性能问题:
容易导致内存泄漏和性能陷阱。
例如:
数据库连接无法关闭,原始JavaBeans架构设计问题,JavaBeans既可实现业务功能、也可实现与业务无关的功能(如显示、缓存、事务等),导致紧耦合,难于扩展维护。
开发方式混乱,代码难懂,无法形成模板化编程,开发进程难以掌握和控制。
完全解耦真正分层,从类开始分离,类是最小单位,粒度最小,相当于沙粒。
每个板块层是由很多基本类组成的,如果能够实现基本类之间解耦分离,那么可完成板块层之间的解耦分离。
类的解耦通过设计模式实现。
GoF设计模式为实现类之间解耦关系提供了最常见的23种处理方式,仅供思路拓展。
类的解耦,类的调用关系不可能被消灭,只能被转移。
调用路径转移。
多层模式实现,为了达到层之间松耦合,层之间使用设计模式实现分离:
表现层:
MVC模式。
业务层:
工厂模式、Command模式和Ioc/AOP。
持久层:
ORM模式、DAO模式和ActvieRecord模式。
框架Framework,框架是设计模式的具体实现。
但比模式更明确,更适合不懂模式的程序员。
使用框架替代模式的好处:
通过一定强制性机制确保结构层次清晰。
框架选择:
Java世界是自由选择,每个层多种多样的框架产品可供选择。
多层框架实现,表现层(MVC模式):
Struts/Tapestry/JSFSwing/Delphi业务层:
EJB/Spring/JdonFramework它们是不同模式和技术的实现。
持久层:
Hibernate/JDO/JdbcTemp/iBatis,多层框架示意图,表现层MVC模式,表现层MVC模式(续),View:
表示显示的视图,如:
不含Java代码的jsp页面/Swing/J2MEController:
表示流程控制,struts中的Action,Controller是Mediator模式实现。
Model:
代指业务层。
表现层基本元素和结构,必须实现功能:
模型组件显示事件触发页面跳转,组件显示对比,Struts:
组件必须继承ActionForm,一个Html表单一个ActionForm。
Tapestry:
组件必须继承BaseComponent;可将组件嵌入Html页面任何一行,对使用组件数量无限制。
JSF:
ManagedBean,无需继承,Ioc模式。
总结:
JSF/Tapestry灵活,JSF干净;Struts多一个界面对象ActionForm,好处。
事件触发对比,Struts:
通过表单提交submit激活,不能细化到表单里字段。
Tapestry:
能够给于表单每个字段贴一个事件,事件组件必须实现PageListener接口。
JSF:
一个字段一个事件,事件组件必须实习ActionListener接口总结:
Struts粒度粗,简化;Tapestry/JSF细,灵活。
视图跳转对比,Struts:
URL使用html:
link的page实现,page的值需要对照配置文件的path命名,与组件Action耦合。
Tapestry:
URL名称就是组件名称,不涉及目录路径,不需在配置文件人为寻找。
JSF:
URL值也需要在配置文件中查找,但是与组件分离解耦。
总结:
Struts/JSF缺点;大量动态链接如工作流等使用Tapestry.,业务组件模型,DomainModel使用四色图等分析方法得出,通过UML类图来表达,反映的是业务需求,和具体项目有关,每个项目不同的就是域模型不同。
ComponentModel是计算机概念,代表业务需求的DomainModel需要计算机软件运行环境支撑,从而组成一个完整的信息系统。
组件模型具体实现,
(1)功能性组件(ComponentModel)实施功能操作行为的类,重点集中在类的方法上。
(2)数据性组件(DomainModel)包含属性、数据(Property)的JavaBeans,重点在类的属性上,类的方法是setXXX()或getXXX()。
服务Service概念,源于WebService概念,SOA将之深入。
定义:
专为外部系统或客户端调用的功能方法业务层中有两种类:
1.一些功能类是供表现层客户端调用,这些功能类为Services,如EJB的SessionBean2.一些功能类只提供业务层本层内部访问调用,称为通常Operations,业务服务的调用,表现层是业务层客户端,表现层中嵌入(耦合)了业务层的调用代码。
action调用代码两行:
1.创建业务层业务功能类代码,将类变成对象:
BusinessIFbi=container.get(“b”);2.调用业务功能对象的方法bi.xxxx();真正目的是调用业务功能对象方法,是第二句。
第二句只和接口有关,和具体业务层功能类无关,已经与业务层解耦(面向接口编程)。
目标:
去除多余的第一行:
如何优化对象创建。
对象发现创建的几种模式,工厂和单态模式:
早期Jive等软件实现,方便简单,存在性能陷阱。
Command模式:
SUN的J2EE案例JPetstoreJNDI:
适合分布式多台服务器运行环境,是EJB创建的最原始方式。
Ioc(又称依赖性注射):
2003年以后兴起的流行的新模式,是JNDI的一种变种,适合POJO和EJB。
Service调用:
工厂单态模式,优点:
形成客户端单一访问业务逻辑层入口,便于增加过滤器(?
)。
缺点:
使用一个总入口会造成过多代码耦合在一个类中,类似滥用Facade模式的后果,Service调用:
Command模式,将所有的服务都展示给客户端,客户端可以通过特定命令形式直接指定调用后台众多Service中任何一种突破了工厂模式单一入口的缺点,但是带来的缺点是易用性不够缺点:
难以形成框架,易用性不够。
Service调用:
EJB的JNDI,优点:
支持集群分布式环境,带来强可伸缩性。
缺点:
只对EJB有效,客户端调用业务层实现代码较多;无法非常自由地为所有Service动态增加新的Filter之类新功能,只能限定在EJB标准规定的几个功能:
事务和安全等。
Service调用:
Ioc模式,具备前两种调用模式的优点,克服其缺点,实现调用关系的最大解耦。
Ioc与AOP的结合使用,可以将通用组件和业务组件很好地协调在一起运行,提供优雅的解决方案。
需要第三方的Ioc容器组件。
业务层组件的组织路线,以IBMBEASUN等工业界软件厂商为主导的EJB标准,将服务强化成SessionBean,诞生相对Web容器的EJB容器。
以开源社区为主导的POJO框架,倡导自主实现,Ioc/AOP是其特征。
两者区别联系:
前者是框架+独立容器;后者是框架+微容器。
J2EE架构组件实现路线比较,业务层组件实现路线比较,EJB路线:
优点:
业界标准,可以有多种产品选择。
缺点:
因为分布式组件导致复杂、难于使用解决缺点方式:
现在:
提供可视化EJB开发工具;EJB3吸收POJO优点。
EJB容器代表产品:
WeblogicWebsphereJBoss,J2EE架构组件实现路线比较,POJO路线优点:
可以自己干预定制通用功能实现,即实现透明操作。
缺点:
目前无标准,严重依赖某个框架产品;需要开发通用功能的高手。
解决缺点方式:
通过开源推广,成为事实上标准。
AOP代表:
Spring框架/Jdon框架,Spring特点,Spring特点,AOP:
可以指定在执行任何Service组件之前或之后执行一个通用功能,粒度最细,灵活度高,运行时组件装配。
Ioc:
解决了对象依赖,将依赖配置在XML,在运行时,将依赖注射。
广泛开源项目,整合Hibernate,提供一个完整J2EEAPI。
Jdon框架特点,Ioc:
依赖无需配置,自动寻找autowiring.AOP:
可以为所有Service之前或之后运行通用功能。
提供模型的CRUD流程配置自动化实现,以及批量查询缓存以及自动分页显示。
同类组件框架比较,设计模式在业务层中的应用,简单系统只有DomainObject和Service;在复杂的系统中,将围绕Service产生很多辅助运算的JavaBeans,数量有可能非常多,使用设计模式组织组件之间的关系.GoF设计模式中的结构模式解决:
如何设计新的组件对象?
如何组织已有的组件关系?
业务组件,多个类组合在一起实现一定功能,称为组件(Component)。
多个类组合关系使用设计模式实现,是一种松散的类关系,容易分离,因此,组件是可组装,如同积木。
组件最大程度提高了复用性,提高大型项目的生产效率。
传统业务组件缺点,组件概念提出虽然解决了编程时软件组合问题,但是灵活性不够。
组件组合不但是编程时灵活组装,而且要求运行时可灵活组装,这样提高软件灵活性。
传统组件运行顺序:
编程顺序=运行顺序,组件之间运行顺序按照编程时确定的代码调用顺序。
缺点:
失去灵活性,不能根据实际需求动态配置运行。
动态组件,动态组件定义:
业务组件之间的关系是在运行时指定的,而不是在编程时确定。
动态组件通过XML配置实现运行顺序调配,减少编码嵌入过程,大大提高软件生产效率。
动态组件是可插拔的Plug-in,可根据需求新增或更换新的组件功能。
动态组件:
过滤器,过滤器实现:
代理模式、Decoraotr模式、Chain模式以及AOP拦截器。
多个过滤器组成过滤器链,ServletFilter以及JiveJdon帖子显示过滤。
Decorator与AOP拦截器的相同与区别;选择使用要点在于被过滤者粒度范围。
动态组件:
替代IfElse,使用过滤器实现动态Plug-in设计。
替代ifelse。
业务层动态组件架构,业务壳Shell设计,业务层包括几个主要功能:
业务核心;Model缓存;权限验证等等如何能够松耦合实现?
多个Decorator和Proxy模式就组合成一个过滤器链,整个过滤器链需要有一个薄容器管理,这就是壳Shell。
Shell特点:
处于业务层最外面,前面和拦截器和表现层接壤;后面和缓存和数据库相接。
动态组件实现之一:
ACL,Web资源,主要是以WebURL为特征,对Web资源的Jsp/Servlet图片等目录下全部资源实现授权访问。
组件资源,同一个组件的不同方法实现对资源进行不同性质的操作,每种操作方法都需
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JEE 架构