Presentation Tier Patterns:
1. Interceptiing Filter。
一种AOP思想的体现。将requet/response的“通用”的pre-处理和post-处理放到一个filter servlet中来。这样就只需写一个filter,而不必将通用代码在各个servlet中都写一份。关于“通用”代码,例子有会话验证、编码转换等
2.Front Controler。
一种Facade思想。将所有的请求都交给一个或几个Servlet集中处理。这个Servlet可以把按请求的具体内容再将它分发给真正的处理者。这样的好处是可以只写一份公用代码,对所有request应用通用逻辑,还可以限制WEB系统的access point。 典型的例子有Spring的DispatcherServlet
3.Context Object
Controller 不去从与协议密切相关的容器中去拿东西(如request.getParameter()),而是从与协议无关的context中去拿。这样可以去掉应用对协议的依赖。 个人认为这个模式没多大意义,因为所有的WEB应用基本上都完全采用HTTP协议
4.Application Controller
将action管理和view管理集中化、模块化。
5.View Helper
将View与它的处理逻辑分开。它的处理逻辑包括 业务逻辑、控制逻辑、展现格式化逻辑等。典型的例子如 Controller,JSTL,自建标签 等
6.Composite View
在页面上,如果要使用复合视图时,要使布局和各页面的内容分离。如Tiles,Sitemesh
7.Service to Worker
在把控制权传给View之前处理好请求并执行业务逻辑
8.Dispatch View
如果业务逻辑很少,并且View自己可以处理请求并执行业务逻辑,则把控制权直接交给View
9.Business Delegate
在客户端/表现层 和 业务层之间再放一个Business Delegate,它代理业务层向客户端/表现层服务,并隐藏业务层的实现细节。主要好处有:
a.消除业务层和客户端/表现层之间的耦合
b.把网络、技术方面的exception(如naming、socket)翻译成可读的exception
c.Business Delegate可以做一些附加的动作,比如出错重试、验证、缓存、同步等,而且这些细节客户端/表现层都不需要知道
d.查找远端对象并与之交互的职责交给了Business Delegate,表现层/客户端不需要关心这些事情
10.Service Locator
使用一个接口,集中地、透明地定位远端的服务组件。
11.Session Facade
在业务层,向远端的Client只暴露一个集中的服务接口。这样可以向Client隐藏服务层的细节,并可以集中地进行事务管理和安全管理。我不太认可这种方式,因为客户要求的服务是非常多的,这会使得此Facade中也存在很多并且相关性不是很强的方法,不符强内聚的原则
12.Application Service
用一个Application整合几个Business Object,实现一个USE CASE。这样的话客户不能直接访问BO,业务层可以向客户隐藏实现,并且,BO之间耦合性也更弱,一个BO也可以设计得更加通用(即不限于某一个USE CASE),这样可以提高代码的可重用性。
Application Service可以用 Command + CommandFactory实现
13.Business Object
将较通用的业务逻辑与持久化逻辑、use case-specific逻辑分开,以实现较好的弱耦合性和代码可重用性
14.Composite Entity
EJB相关,不懂
15.Transfer Object
使用一个只有属性、没有方法的简单类,在客户层和远程服务层之间传输数据。这样可以减少网络消耗
16.Transfer Object Assembler
把服务器端各层传给客户端的对象组合在一起,打包成一个大对象传来去。这样可以集成服务端各组件向客户端暴露的接口,减少客户端与远端服务器的交互次数。既简化了客户端的逻辑,又减少了网络开销
17.Value List Handler
在服务器端搜索到大量数据后,返回一个Iterator,使得客户端只能以迭代的方式访问这些数据,而不能一次性得到所有数据。这样可以减轻网络负担
18.Data Access Object
用独立的模块将数据访问封装起来,抽象成供上层调用的访问接口。这样可以保证持久数据访问的透明性,并使上层保持一种面向对象的风格
19.Service Activator
用一个 Service Activator 接受异步的请求
20.Domain Store
不太懂,体会不到有多大妙处
21.Web Service Broker
不知道好在哪里