1、译文一: 一种新的网络应用程序开发框架 MVC* 摘要 MVC(Model/View/Controller)的设计模式出现在在 Smalltalk-80,并在软件的设计中广泛应用。本文介绍一种基于 MVC框架的的新网络应用程序。这种框架把实施逻辑与表现形式独立开来。它也提高了系统的可维护性 ,可扩展性以及使用模块数据库备案、模板数据库 ,通讯对象和缓冲队列的性能。 关键词 :MVC、设计模式、 网络应用程序 1.简介 网络应用系统是一个基于 B(rowser)/ S(erver)模型 应用系统 。它利 用多种动态网页 开发 技术。目前 ,软件设计 的主题之一是 网络应用 开发 模式和工具的。
2、它 们直接影响 系统 的几个关键因素 ,比如可维护性 、 可扩展性、稳定 性 和安全 性 。 本文中, 基于 MVC1的网络应用程序的设计模式是为解决这两类 因素 扩展性 和 可维护性 这些不易处理的问题 。 把 MVC设计模式引入网络应用程序开发 ,执行 逻辑可以 独立于 系统的 表现形式 。 MVC由三种对象 组成 。 1)模型 :是应用对象 , 2)视图 :是它的屏幕的 显示 ,3)控制器 : 定义用户界面 并对 输入的信息 做出响应 。 在出现 MVC之前 ,用户 界面的 设计 倾向于 把这些东西 做 在一 起。然而 ,MVC独立了它 们 , 增加 系统的 灵活性和 可 重用 性 。
3、MVC把视图和模型 独立开来 ,在它们之间 建立了 “ subscribe/notify” 协议。一个视图必须确保其 正确反映 模型的状态。每当模型的数据 发生 改变 ,视图会得到相应的通知 。作为回应 ,每个视图 都会有 更新 自 身 的 机会。这个方法可以让你附上 一个模型的 多 个 视图 以便 提供不同的报告。你也可以 不改变原 模型 同时 创建新的 视图 。 2.背景和存在的问题 虽然 MVC的设计 模式已经 在 smalltalk-80中 提出了 ,并 广泛应用于软件设计 ,介绍它 到网页应用程序开发 却仍很 困难 的。主要由于以下两个因素 :1)首先 ,很难 独立 来自 HTML的
4、编程语言。早期的 CGI程序使用字符串输出创造了 HTML内容。 默认的 ,将 HTML文本 分成几份 ,然后 把 他们 嵌 入 到 CGI程序 中 。脚本语言出现后 ,变成了 脚本语言编写的程序 嵌入到 HTML文本中 。然而 ,这两种方法有一个共同的不足 ,使他们不能 完全 独立 于 HTML文本 。 因 此 ,这两种方法 使 采用 MVC分离三层 模式 十分难以实现。 2)第二 , * Luo Guangchun, the Ph.D. of UEST of China; Wang Yanhua, the Master of the UEST of China; Lu Xianliang,
5、 the professor of UEST of China, advisor of Ph.D.; Han Hong, the Ph.D. of UEST Of China 脚本语言的功能太弱。他们缺乏一些必要的技术支持 来 采用 MVC的设计模式 ,如消息机制和事件回应机制。直到 JSP Model2版 ,这种 情况并没有受到任何改善。依靠强大的Java语言功能 ,JSP Model24某种程度 上 实行 MVC设计理念。 图 1显示了 MVC的 机制 : 模型 (数据层 ):它是封装到企业 JavaBean。 视图 (表示层 ):JSP负责的网页方式 ,如报告的格式 ,分页等。 控制器
6、(控制层 ):Servlet受到 网页上的 用户的输入并执行有关 的操作 (呼叫相应的EJB组件 ),给出了相关 视图 ,所以 JSP会呈现这些结果。 JSP Model2 机制主要满足了开发商对要求 Web应用逻辑和用户界面独立的需求。但制仍然存在某些限,例如 ,尽管 JSP Model2 已经实施采用 MVC设计模式的基本理念,三个层次之间的相互关系(Servlet,Java Bean/ EJB 和 JSP)仍然封闭。特别是 ,就 Servlet 当控制器 ,不仅控制选择同时响应模型的模块 ,还负责对处理 JSP 转移数据提供模块。因为这一过程 ,Servlet 本身已实现非常复杂的执行逻
7、辑,对于体系的发展和维护这是正是一个棘手的问题。因此 ,在下面的网络应用系统框架 ,我们会进一步划分出功能的控制器。 3.解决方案 图 2中显示 ,这一系统框架包含三个内核控制对象 /类 (SYSController, Model Center, and LPM(Logical Page Module) Center)和它们的核心数据库 (system description database, model database, and LPM database)。这三个控制对象 /类根据原始的控制器划分。通过这些控制对象 /类和数据库 ,下文将解释部分的设计思想和该系统框架的实现机制。 首先
8、,我们考虑 SYSController和系统的描述数据库。他们负责接收用户的要求 和根据这些请求搜索有关的执行逻辑。系统描 述数据库可以是一个 XML2文件或一套XML文件。这个数据库描述了不同的执行逻辑与不同的用户请求。执行逻辑主要包括互动模式、数据来源与异常处理等,这些组织在一个树形结构中。而 SYSController可以搜索系统描述数据库。它结合了用户的要求和来自数据的执行逻辑 ,然后把它们交给传输器来封装。 SYSController有两种方法搜索数据库。 其一是使用 DOM对象(Document Object Model)3。当应用程序系统开机 ,这样需要 DOM解析器分析整个数据
9、库备案后载入内存。数据库将保留在内存中的 DOM树结构。另一种是使用 SAX(Simple API for XML)接口。两者有各自的优缺点。使用 DOM可以实现结构搜索。它可以在大型数据库上使用 ,但是会暂用更多的系统资源。而 SAX接口以高效率和更少的系统资源占用率著称。唯一的缺点是它获得信息比 DOM难。 其次 ,我们考虑模型中心和模型数据库。该层通过调用给定模块完成定义执行逻辑。模型数据库包括大量的对象和模块。这些对象和模块根据特定的执行逻辑封装响应方法。当模式中心接收到的执行消息 ,它根据封装在信息里的执行逻辑选择合适的对象或模块。然后按照给定的 数据格式封装模块 ,冰传输给 LPM
10、中心。此外 ,每个对象或模块只需要关心如何实现给定的事务的逻辑以及如何获得必要的 数据而不提交这些数据。 最后 ,我们研究一下 LPM中心和 LPM数据库。 LPM是实施描述的某一种数据类型的项目集合,它可以当成是一个或一组磁盘文件。在另一方面 ,有一个网页可有一个逻辑页或多条逻辑页。一个 LPM的功能是很简单的 :它只需要在没有被得到执行逻辑和原数据内容的情况下给定数据类型。因此事实上 ,LPM是作为标签库 (JSP)或数据捆绑 (.net)而开发的。此外 ,这种类型的服务器脚本可以很容 易由客户开发人员在 UI(user interface)设计阶段理解, what-you-see-is-
11、what-you-get(所见即所得 )工具也很容易开发。在这部分 ,LPM中心从模型中心收到数据。它根据给定数据类型和执行逻辑选择适当的逻辑页模块 ,然后封装逻辑页的输出模块到 HTTP响应并将发布到客户端。 注意到这 3个控制对象 ,除了 SYSController,另外两个不是直接进入自己的核心数据库。例如 ,模式中心不直接从模型数据库调用对象或模块。它实现了通过 ModelFactory的存取。(过程见图 2) 通过分析系统框架 ,可以看出整个系统完全符合 MVC设计模式。在在系统的开发时期各部分的开发者三者冰不具有相互的干涉。当系统框架已确定,各部分惊人的发现开发的相似。在过去这对网络应用程序的开发来说是不可能的。因为我们已经把控制器分为 3个部分, MVC三层 (模型 /视图 /控制器 )的联系变得更加宽松。所以它可以明显提高整个系统的可扩充性。在下一节 ,我们将向你展示一个简单的例子去解释如何在