边城愚人

如果我不在边城,我一定是在前往边城的路上。

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  31 随笔 :: 0 文章 :: 96 评论 :: 0 Trackbacks

1 MVC 模式

当年做 JSP 生产实习时,印象最深也最困惑的模式就是 MVC 模式了。那时候 Struts 刚红,几乎每本 Struts 书中都会有大篇幅的 MVC 介绍。这个模式最早出现在 GUI ,后来在 Web 服务器端红火起来,先前在 Ajax 书中也看到 Web 客户端的 MVC 介绍。说实话,在我看了很多人的 MVC 解释后,我仍有些糊涂,这里说说我的理解。

有人提到MVC模式时说MVC代表了模型层、视图层、控制层,我觉得这是不对的。在经典的J2EE三层架构中,三层是分为Web层、业务层、持久化层;这个经典分层是基于分布式应用(EJB)的,也就说,Web层物理上是在Web服务器中, 业务层和持久化层物理上是在应用服务器中。在这种情况下,MVC只是属于Web层这一层的,而不是分为三层。在这种分布式应用中,视图就是JSP(如果采用的话),控制器就是Servlet(如果采用的话),而模型就是就是调用业务层的在Web层中的桩子。假如我们采用轻量级的SSH技术架构,视图还是JSP,控制器是Struts,而模型就是SpringHibernate。这里最难理解的就是模型的概念。我觉得模型是有状态和行为的,那么Struts中的Action调用的Servcie方法就是模型的行为,而返回给JSPDTODO)就是模型的状态。

2 )页面控制器

对于一个页面请求,总要有个地方负责处理和页面跳转的地方,这个地方就是页面控制器。页面控制器有两种,一种是如Servlet的脚本文件,一种是如JSP的服务器页面。对于Java来说,JSP就是只应该用来显示动态的或静态的信息,而不是用来负责处理RequestRedirect页面,否则Servlet就要失业了。尽管一个Web程序可以全由JSP文件组成,但将控制甚至业务脚本杂乱的穿插在Tag中真的是太糟糕的实践了。我记得最初学JSP时,从网上得到的用JSP做的管理系统很多都是纯JSP,那时我还以为那就是Java Web开发的最佳实践了!

3 )前端控制器

如果你不是Web框架的设计者,想必你不会有机会做个前端控制器,尤其是在拥有了大量优秀的Web框架的Java社区里。前端控制器这个模式我以前在《J2EE核心模式》中看到过,感觉那本书的例子写的很好。前端控制器是由一个Web处理程序和一个命令(Conmmand)层次结构组成。以Struts1为例,其前端控制器就是ActionServlet,那些我们需要编写的Action就是前端控制器要处理的命令。在简化Web开发方面,前端控制器通过Web处理程序做一些具有共性的有价值的事情。比如Struts1的前端控制器通过Form简化了请求参数的获取和验证,而Struts2WebWork)做的就更多,它的命令Action不是单例的,Action的属性可以是封装了请求参数的(经过类型转换)域对象或传输对象,其以拦截器链表现的Web AOP更是简化了横切性方面的操作。

4 )模板视图

Java Web 中最常用的视图表现技术就是 JSP ,我们可以以多种编程手法表现来自于数据库中的数据。我们可以使用 Scriptlet 将模型数据嵌在 HTML 中间,我们可以使用诸如 JSTL 和框架标签穿插在 HTML 中间,我们也可以自定义标签来封装一类数据表现。相比来说,使用标签要比 Scriptlet 更清晰些,毕竟 JSP 页面就是应该编写可视化更好的标签。但如果有条件判断等逻辑信息,使用标签有时也不见得有多清晰,这是可以考虑使用自定义标签。

5 )转换视图

MF 通过 XSLT 介绍了转换视图,由于本人没有使用过 XSLT ,这里不做介绍。我倒想起了以前的 Ajax 编程,也是个转换视图的过程。在 Servlet 中将模型数据拼串成 XML HTML )文档,然后传送到 JS ,再构造成 DOM 树(或是将 HTML 文档添充在指定的 HTML 标签内)。在最原始的 Ajax 编程中,无论是在 Servlet 中拼串还是在 JS 中构造 DOM 树都是很繁琐很难调试的事情,尤其是在我很不喜欢在 Java 文件中夹杂着 Tag 信息的情况下。

6 )两步视图

两步视图说的是,用两个步骤把领域数据转换成 HTML :第一步形成某种逻辑页面,第二步把这些逻辑页面转换成 HTML 页面。这个模式实际上一种装饰者模式,第二步的视图渲染过程要做的就是将逻辑视图加上一致的表现形式。我能想到的是,可以通过诸如 SiteMesh Tiles 等工具完成两步视图模式。在不使用 XSLT 的情况下,第一步形成的模板视图显然也不是一种诸如 XML 的逻辑页面 。

7 )应用控制器

这是《 POEAA Web 表现模式中的最后一个模式, MF 说这个模式很少会被用到,它一般用在具有特定的视图导航的情况下,也就是说页面访问顺序不是任意的而是和当时的对象状态有关。书中介绍的例子是关于状态模型的,没完全理解的说。我能想到的例子是具有上下步的注册过程,可以认为上下步的切换是特定的,是具有状态信息的;可以强联系上 MF 的说法,一个输入控制器将请求传到应用控制器,应用控制器根据当前步数和请求的步数使用特定的命令进行操作,并传回输入控制器下一步的视图。关于应用控制器的更精确的理解,也欢迎明白的你指出。


注:此文系重温《企业应用架构模式》一书的简要笔记,对企业应用架构模式或 Web 表现模式感兴趣的朋友可以阅读一下该书。

posted on 2007-08-23 10:00 kafka0102 阅读(1569) 评论(0)  编辑  收藏 所属分类: Pattern

只有注册用户登录后才能发表评论。


网站导航: