1.定义
在某种特定的上下文中反复出现的一个“问题/解决方案”对子。
2.模式共同特点
l 模式是通过经验观察得出的。
l 一般来说模式都按一种专门的结构格式来记录。
l 采用模式能够避免重新发明轮子。
l 不同的模式处于不同的抽象层次上。
l 模式要经历不断的改进、完善。
l 模式是可以重用的工件。
l 模式可以用来让大家交流系统设计和最佳实践。
l 多个模式可以拼合起来,从而解决一个大型问题。
3.软件模式类型
l 设计模式
l 架构模式
l 分析模式
l 创建型模式
l 结构型模式
l 行为型模式
4.J2EE模式
即是设计模式也可算是架构模式,并可按逻辑分三类:
u 表现层
u 业务层
u 集成层
4.1表现层
拦截过滤器
前端控制器
Context对象
反应控制器
视图助手
复合视图
服务到工作者
分配器视图
4.2 业务层
业务代表
服务定位器
会话门面
应用服务
业务对象
复合实体
传输对象
传输对象组装器
值列表处理器
4.3 集成层
数据访问对象
服务激活器
业务领域存储
Web Service中转
5 模式框架
在一个整合的应用场景下的一组模式集合。要在模式的层面上把解决方案组合起来,或把组件装配到一起。
不仅需要孤立地理解单个模式,还必须注重它们之间的关系和组合;如何才能最好地把多个模式连接在一起,形成大的解决方案。
模式驱动的开发过程:
l 确定应用场景,为系统每个层次提出合适的模式。
l 确定模式组合(或者说解决方案的主旨),从而给出模式框架。
l 为系统方案中的每个角色选定具体实现策略。
6.按逻辑划分的五层模型
6.1 客户端层
应用客户端、Applet、应用程序和其他GUI:用户交互、UI表现和UI设备。
客户端可以是web浏览器,java应用程序,wap手机之类。
6.2 表现层
JSP、Servlet和其他UI元素:集中登录、会话管理、内容创建/内容格式/内容传递。
封装了服务于访问系统的客户端的所有表现逻辑。拦截了客户端的请求,提供单一的登录入口,构造了会话管理,控制了对业务服务的访问,构建了响应,并把响应传送到客户端。Servlet和jsp本身不是UI元素。
6.3 业务层
EJB和其他业务对象:业务逻辑、事务、数据、服务。
业务一般在这层,但也可能在遗留系统。
6.4 集成层
JMS、JDBC、连接器和遗留系统:资源适配器、遗留/外部系统、规则引擎、工作流。
使用JDBC、J2EE连接器技术、某种厂商专有的中间件,从而于资源层协作。
6.5 资源层
数据库,外部系统和遗留资源:资源、数据和外部服务。
业务数据于外部资源。
7.模式关系图
8.模式应用
8.1表示层模式
n 对请求做预处理或后处理:拦截过滤器
n 在请求处理中加入日志、调试以及其他操作:前端控制器、拦截过滤器
n 集中对请求处理的控制:前端控制器、拦截过滤器、应用控制器
n 为降低控制器组件和助手组件间的耦合度,创建通用的命令接口或context对象:前端控制器,应用控制器,Context对象
n 控制器应该用servlet还是JSP实现:前端控制器
n 从多个子视图创建一个视图,复合视图
n 视图应该用servlet还是jsp实现,视图助手
n 如何划分视图和模型:视图助手
n 在那里封装表现层相关的格式化数据逻辑:视图助手
n 助手组件应该用JavaBean还是定制标签实现:视图助手
n 合并多个表现层模式:拦截过滤器,分配器视图
n 在哪里封装选择、分派视图的视图管理/导航逻辑:服务到工作者,分配器视图
n 在哪里保存会话状态:在客户端保存会话状态,在表现层保护会话状态,在业务层保护会话状态
n 控制客户端对特定视图或子视图的访问:控制客户端访问,对客户端隐藏资源
n 控制对应用系统请求的流程:重复的表单提交,引入同步令牌
n 控制重复的表单提交:重复的表单提交,引入同步令牌
n 利用<jsp:setPropertity>的JSP标准属性复制机制时,包含的设计问题:助手类属性——完整性和一致性
n 分离数据访问代码:分离数据访问代码
8.2业务层模式
n 尽量减少表现层和业务层之间的耦合:业务代表
n 为客户端缓存业务服务:业务代表
n 隐藏业务服务的寻址/创建/访问的实现细节:业务代表,服务定位器
n 隔离服务寻址中的特定厂商/技术的依赖:服务定位器
n 为业务服务的寻址和创建提供统一的方法:服务定位器
n 隐藏EJB和JMS组件寻址的复杂度和依赖性:服务定位器
n 在业务对象和客户端间,不同层间传输数据:传输对象
n 为远程客户端提供简单,统一的接口:业务代表,会话门面,应用服务
n 为访问业务层组件提供粗粒度方法,从而减少远程方法调用:会话门面
n 管理EJB组件之间的关系,隐藏交互复杂度:会话门面
n 避免使业务层组件直接暴露给客户端:会话门面,应用服务
n 为访问业务层组件提供统一的边界:会话门面,应用服务
n 用对象实现复杂的业务领域概念模型:业务对象
n 为对象实现复杂的业务领域概念模型:业务对象
n 为业务对象和entity bean的设计找出粗粒度对象和从属对象:业务对象,复合实体
n 设计粗粒度entity bean:复合实体
n 减少或消除entity bean客户端对数据库结构的依赖:复合实体
n 减少或消除entity bean之间的远程关系:复合实体
n 减少entity bean数量,提高可维护性:复合实体
n 从多个业务层组件中获取应用数据模型:传输对象组装器
n 轻松构造应用数据模型:传输对象组装器
n 对客户端隐藏数据模型构造的复杂性:传输对象组装器
n 提供业务层查询和结果列表处理:值列表处理器
n 尽可能减小使用EJB finder方法带来的负载:值列表处理器
n 在服务器端为客户端提供具有向前/向后导航功能的查询结果缓存:值列表处理器
n 选用有状态session bean还是无状态session bean的权衡:“session bean--无状态vs有状态”
n 保护entity bean,禁止客户端直接访问:用session bean包装entity bean
n 封装业务服务,隐藏业务层实现细节:引入业务代表
n 在entity bean中包含业务逻辑:entity bean中的业务逻辑,将业务逻辑移至session bean
n 把session bean作为粗粒度业务服务提供:合并session bean,用session bean包装entity bean。
n 减少和/消除由entity bean之间的通信引起的网络和容器负担:减少entity bean之间的通信
n 分离数据访问代码:分离数据访问代码
8.3集成层模式
l 尽可能减小业务层和资源层之间的耦合:数据访问对象
l 集中对资源层的访问:数据访问对象
l 尽可能减小业务层组件中访问资源的复杂度:数据访问对象
l 为企业应用提供异步处理能力:服务激活器
l 向业务层发送异步请求:服务激活器
l 把请求作为一组并行任务异步处理:服务激活器
l 透明地实现对象模型持久化:业务领域存储
l 实现定制持久化框架:业务领域存储
l 用XML和标准Internet协议暴露WebService:Web Service中转
l 把现存服务聚合,中转为WebService,Web Service中转