为快速Web应用开发设计一个MVC模型(翻译)

摘要

在本文中,我们提出了一个快速Web应用开发的模型。这个模型是基于模型 - 视图- 控制器架构(MVC)的,并且具有几个其它有用的组件,像安全,表格生成和验证,数据库访问和路由等。该模型使用PHP编程语言来实现,但它可以在使用相同概念的前提下,在其他开发语言和环境中实现。在开发和维护的时间内完善它已经成为了这项研究的主要目标,正确的,可维护的代码会带来益处。

1介绍

自从有了万维网开始后,Web应用程序开发已经走了很长一段路了。各种各样的技术和编程语言现在都能被用于构建Web应用程序,但由于万维网发展方式的不同以及对于响应速度的要求的问题,所以这些技术并不是真的都有时间能够发展并跟上时代的步伐。很多玩家试图找出不同的、诡异的技术,主要是为了改善用户体验,并帮助开发人员构建速度更快,功能更强大的Web应用程序。其中的一些技术在Web开发中已经发挥了重要的作用,但是与此同时,我们也看到了其中的一些技术在过去几年里的使用率已经下降了,像Java Applet和微软的Silverlight。另一方面,许多技术已经从简单的玩具衍变成如今'网络生态系统部件“强大而且重要的一个部分,如JavaScript,Flash和XML。

今天的Web环境采用HTML和CSS呈现数据给用户,并且通过JavaScript完成与用户的交互行为。这些技术被称为“前端”或“客户端”的技术。另一方面,“后端”或“服务器端”技术用于数据的存储和处理。

2问题描述

前端和后端的技术来共同构建了Web应用程序,但是因为万维网已经发展到了这样一个快节奏的时代,而开发人员却需要使用相当大量的技术,仅仅是为了构建一个单一的Web应用程序,结果导致他们的项目常常难以维护和修改。

开发者结合HTML代码与服务器端的编程语言来创建动态的Web页面以及应用程序,而这会导致开发者非常纠结并且代码难以维护。

另一个问题已经表现出来了一个事实,Web技术正越来越多地用于构建各种复杂的应用程序。微软拥抱Web技术,鼓励开发人员为它最新的操作系统Windows8来构建应用程序。当然,大量框架的存在帮助了Web开发人员为移动设备编写应用程序,如ISO和Android。更有甚者,一些在项目和设备中的移动操作系统在今年迟些时候被期望整个使用Web技术,完全的使用开发者API(Mozilla火狐操作系统)。基于这些原因,一个Web应用程序通常是由一个专门的开发者团队来创建的,每一项工作都使用最受欢迎的技术,比如用于表现层的HTML和CSS,用于客户端交互的JavaScript,PHP(或ASP,Java,Python,Pearl, Ruby等)用于进行服务器端的逻辑业务处理,MySQL(或Oracle数据库,Microsoft SQL Server等)用于数据存储和管理。

这些专家中的每一个都需要与它们的同事以这样的方式工作,即,他们的代码块需要适应应用程序内部的整体设计。例如,客户端(数据表现层)开发者需要修改HTML和CSS代码时,他不会破坏处在同一个文件中的服务器端开发人员的代码。此外,当数据库开发人员改变一个应用程序的架构时,服务器端的开发人员可能需要更改大量的代码来使应用程序正常工作。

有一件重要的事情需要注意的是,这里强烈的需要在一个应用程序中从业务逻辑层和数据存储层分离出表现层。

这儿有一些应用程序设计范例和模式,为这个问题提供了解决办法,但如今的重点是MVC模式。

在进行研究时,我们正在各种各样的系统和框架中使用我们已经拥用的经验在构建Web应用程序,我们试图找出这些系统的优点和缺点,同时提供我们对于这些做法如何可以改善的看法。研究的框架和系统包括:Symfony,CakePHP,CodeIgniter,Zend Framework,Laravel,Fuel PHP,Ruby on Rails和ASP.NET MVC。

3MVC模式和文献综述

在本节中,我们将回顾该领域研究的现状和看看背后的MVC模式的文献,描述该模式的主要功能部件。

MVC设计模式最早是由特里夫Reenskaug在20世纪80年代于Xerox PARC提出来的。据他介绍,“MVC的主要目的是弥合人类用户的心理模型,并且存在于计算机中的数字模型之间的差距”。 [1]

后来,在1988年,MVC范例被Krasner and Pope 在他们的文章“在Smalltalk-80使用模型视图控制器界面范式的一本食谱”中进行了详细的描述,发表在面向对象编程杂志上面。

他们强调指出,如果一个开发者在心中使用了模块化来构建应用程序,那么他将从中收获巨大的好处。“尽可能的互相隔离功能单元,使得应用程序设计者更容易理解和修改每个特定的单元,而不必知道关于其他单元的每一个方面。”

一个应用程序被分成三个主要类别:主要应用领域的模型,在该模型中的数据呈现和用户交互。

MVC模式分裂的责任分为三个主要角色,从而允许进行更有效的合作。 [3]这些主要角色是开发,设计和集成。

开发角色采取有经验的程序员负责应用程序的逻辑部分。他们照顾的数据查询,验证,处理和更多方面。

设计角色是那些负责应用程序的外观和感觉的开发者。他们展示从第一层角色开发者那儿获取的数据。

集成角色负责组合前两个角色的工作。

MVC设计模式就是这样一个非常适合Web应用程序开发的模式,因为他们结合多种技术将他们分为一系列的层。此外,MVC根据用户特定的行为,能够发送特定的视图给不同类型的用户代理。

“与MVC应用程序的用户交互遵循自然循环:用户采取的动作,并且响应该应用程序改变其数据模型,并提供一个更新的视图给用户。然后重复循环。这是一个非常方便的适合递送作为一系列HTTP请求和响应的web应用程序。”

3.1 模型

模型是系统的一部分,是管理相关的数据的所有任务的:验证,会话状态和控制,数据源结构(数据库)。模型大大降低了开发人员需要编写的代码的复杂性。

模型层负责应用程序的业务逻辑。它将封装方法来访问数据(数据库,文件等)以及将可重复使用的类库可用。通常一个模型是在大脑中通过数据抽象创建的,验证和认证数据抽象。

此外,模型是由用于定义感兴趣的域类。属于该域这些对象经常被封装存储在数据库中的数据,而且还包括用于操作该数据并执行业务规则的代码。

作为结论,模型主要是处理数据访问抽象和验证的。模型中拥有的方法是用于与不同的数据源进行交互的。

我们相信,在薄型化中的做法,它说,模型应该保持尽可能简单,只包含了严格依赖于被模仿现实生活的目标数据处理。薄模型被加上一个肥胖控制器,里面包含大多数应用程序所需的数据处理。通过这种方式,模型成为应用程序之间高度可重复使用的部分,所以一个开发者大部分的工作被保持在了控制器内部。

我们的模型系统带给MVC世界新奇的是版本控制系统,基于数据本身的迁移的想法,不只是跟踪数据结构,而是数据本身。该系统采用XML文件来存储数据之间的迁移,使得数据库的版本过程成为一件易于完成的事情。

3.2 视图

视图负责图形用户界面管理。这意味着所有形式,按钮,图形元素并且所有其它在应用程序内的HTML元素。视图也可以用于产生聚合的RSS内容或Flash演示。通过从应用程序的逻辑分离视图的应用程序的设计,当设计者决定通过改变一个标志或一个表来改变该应用程序的接口时,我们大大减少了错误的风险。与此同时,开发者的工作大大减少了,因为他不再需要看到HTML代码元素,设计元素和图形元素。

视图层是通常被称为网页设计或模板。它控制显示数据的方式以及如何与用户进行交互。它还提供了从用户处收集数据的途径。应用于此的主要技术是HTML,CSS和JavaScript。

作为一般规则,一个视图永远不应该包含属于应用逻辑的部分,为了使其更容易被设计者使用。这意味着逻辑块应保持在最低限度。

大多数Web应用程序框架如今使用某种模板引擎,利用生成器元素,为了保持HTML代码在最低限度,减少打字错误的风险。这些生成器通常被用来制作复杂的网络谐音,像表单,表格,列表,菜单等等。在这种情况下,我们所确定的问题是,这种想法的所有实现都使用在幕后或不透明来生成部分代码的。这样一来,前端开发者只能看到已经产生后的结果代码,具有很小的可能性甚至没有办法修改模板。我们的系统使用特殊的HTML注释来插入和生成部分基于模板的代码,也只是HTML文件。预处理系统使用注释来解释特殊命令,以便将数据插入到模板。这使得整个过程对于前端开发者来说非常的透明,在渲染视图之前他可以看到整个标记。

3.3 控制器

控制器负责事件处理。这些事件可以由一个用户使用的应用程序或由一个系统进程交互触发。控制器接受请求并准备数据响应。它还负责建立该响应的格式。控制器与模型进行交互,以便检索所需要的数据,并生成视图。这个过程也被称为一个动作或动词。 当一个请求到达服务器,MVC框架将请求分派给基于URL的控制器中的一个方法。

控制器绑定所有应用程序逻辑并结合模型中的功能在视图中显示。它负责从视图进行数据检索,并且为应用程序建立执行路径。控制器将访问模型功能,它会解释接收到的数据,以便它可以由视图显示。它还负责错误处理。

控制器管理视图和模型之间的关系。响应用户的请求,与模型交互,并决定哪些视图应该生成并显示。

正如上面提到的,我们拥抱肥胖控制器的做法,认为所有的应用程序特定数据的处理应该在控制器级别进行处理。我们的控制器系统是基于REST和支持JSON(P),文本和XML数据格式请求和响应的。

4数据库抽象

在面向对象的编程中,应用程序使用对象构建。这些对象反映现实生活的对象,他们同时包含数据和行为。这种关系模型被广泛用于应用程序使用表格存储数据并且中的数据存储在使用表来存储数据和数据操纵语言来与该数据交互。某些数据库管理系统具有面向对象的特点,但它们不是完全兼容。这是很清楚,这两种架构得到广泛使用,将是很长一段时间,从现在。此外,关系模型和面向对象的编程一起使用的大部分时间来建立每个尺度的应用程序。但这样的两种技术结合起来是远远不够完善。用于这种不匹配的词是“对象 - 关系阻抗不匹配”。

这种不匹配背后的原因是,这两个技术依赖于不同的概念。面向对象的编程依靠被证实的编程概念,而关系模型遵循数学原理。

对象 - 关系映射系统被开发出来只是为了解决这个问题。

对象关系映射系统(ORM)被定义为一个工具,用来提供一种方法和一种机制,用于面向对象的系统以安全、长周期的方式在数据库中来存储数据,具有事务控制他们,而不是用来表现的,如果需要的话,作为在应用程序中的对象。

一个ORM系统将开发者从烦恼的数据库结构或模式中释放出来。数据访问是通过使用一个反映开发者业务对象的概念上的模型。

总之,我们可以说,一个对象- 关系映射系统是使用一种方式从与类编程语言相关联的关系系统去关联数据,允许开发者采用面向对象编程中的著名概念去工作,从关系系统去管理数据。

一个MVC平台必须为开发者提供一种方法来与数据库管理系统进行交互,存储和检索数据。大部分的时间,这是一个综合的ORM系统。

因为在MVC架构中,模型是与数据交互的层,ORM系统隐藏在它背后。基本上,每一个模型都被连接到ORM系统,它使用这个系统去与数据交互。但开发人员可能访问不需要使用一个模型的ORM系统的资源。

我们的ORM系统支持对象之间的多对多关系并且具有用于对对象联动最大深度水平的设置。

另外,我们提供了一个选项,以保持一定的数据集存储,并跳过数据库查询,在最低限度内降低响应时间。

至于NoSQL数据存储而言,我们支持访问许多这样的系统的一个接口。此接口是ORM系统的一部分。

5安全性

Web应用程序的漏洞是造成对商业环境中的用户攻击的主要原因。

当构建Web应用程序时,这儿有很多东西需要开发人员来注意,安全风险可以被分成几类:

  • 用户输入验证:缓冲区溢出,跨站点脚本,SQL注入,规范化;

  • 认证:网络嗅探,暴力攻击,字典攻击,cookie伪造,盗用身份;

  • 授权:访问权限冲突,私有数据显示,数据变更,跟踪攻击;

  • 配置管理:未经授权的访问管理界面,未经授权的访问配置区域,进入文本,缺乏行动日志存储配置数据;

  • 敏感信息:访问敏感数据的数据库,网络嗅探,数据变更;

  • 会话管理:会话盗窃,会话改变,中间人攻击;

  • 加密:弱的安全密钥,弱加密;

  • 参数操纵:查询字符串,表单字段,cookie和HTTP头操作;

  • 异常管理:DOS攻击;

开发者需要防护抵制所有这些类型的攻击并且安全性需要在MVC架构中的每一层都能进行掌控。

我们的系统提案已建成CSRF攻击防范,一个简单的身份验证模式,一个复杂的基于角色的安全系统和资源的高度可定制的访问控制列表。

6路由

HTTP协议处理的URL书写方式非常类似资源路径被写入UNIX环境的方式。

Web服务器牢记这一点,并含蓄地寻找一个分层文件系统的数据。

通过这种方式获取的资源是相对比较容易和直观的,但随着Web应用程序复杂性的增加,需要一个更好的系统出现。为了解决这个问题,我们可以以这样一种方式配置Web服务器和开发框架,它将以独特的方式解释结果并且访问资源。

这些系统被称为URL映射或URL路由系统。该技术也被称为URL美化和帮助开发人员构建有序的和漂亮的网址数据,而用户和搜索引擎可以处理的更好。

我们的系统是建立在“控制器/动作/参数”模式上的,但它也允许开发人员配置他们自己的静态路由。

访问控制在路由级别完成,以减少不必要的处理时间。

7快速原型

在Web应用程序开发的世界,很多应用部分似乎被多次使用。例如Web窗体确实是被经常使用的一个工具。表格和列表也是这样。但是,从头开始构建这些元素很多时候是相当困难的,因为涉及到编写大量复杂的标记。

每个系统可以受益于快速原型成形模块,它不仅快速生成这些工具,而且还提供了一些方法,以验证数据(表格)。

当与ORM系统相结合去创建CRUD 系统时,这些工具确实非常有用,因为从头到尾只需要几行少量的代码。

如上述一节意见所述,我们的系统是基于一个灵活且完全透明的模板引擎,来造福于后端和前端开发人员的。

8系统概述的建议

我们的平台解决方案囊括结合了所有以上各个方面,是具有鲁棒性的且易于使用和维护的。

上述的结构可作如下描述。该数据源可以是任何类型的数据库。ORM系统是一套专门为最知名的数据库管理系统构建的类。一个主类提供基本映射,关系和管理一般类型表中期望的DBMS。关系应该被映射以允许以一个面向对象的方式获取相关联的数据,而无需开发者编写复杂的查询。立即加载和懒加载应予以考虑。

模型被作为孩子从主ORM类创建,它继承了主类的功能。此外,模型富集了独特属性,它应仿照现实生活中的对象来进行描述。

该控制器是处理模式查询,访问安全和路由解决的基类。控制器被构建为基础控制器的孩子并且继承了基础控制器的功能,并具有丰富的应用程序逻辑和对应所需的操作。

快速原型系统作为一系列的类,允许开发者去建立类似表单和表的复杂HTML对象,而不需要编写HTML代码。表单应提供数据验证、表格排序和嵌套的特性。快速原型系统应该提供类似DOM的处理能力,以访问数据。

视图是一个包含所有显示逻辑的基类。视图被构建为这个主类的孩子,并且应连接到特定的动作和控制器。由于性能的原因,视图应该被预先渲染的性能,而且应该能够缓存。视图系统可以依赖一个模板系统和一部分系统代码的重用。

9总结

基于以上制定的建议,我们已经建立了一个坚实的框架,能够大幅度减少网络应用程序开发的时间,使开发人员能够专注于应用特定的任务,而不是浪费时间去实现众所周知的模式和做法。

Web技术在很短的时间内已经走过了漫长的道路,而web应用程序的市场是不断增长的。我们的系统可以帮助开发人员提高工作的速度和质量,并且为初学者和有经验的用户提供了一个很好的工作框架和平台。

我们已经建立了一些使用组件的应用程序形成的平台方案,这些应用表明我们正在建设的系统是在正确的轨道上,同时在一些需要被完善的方面给予了我们有价值的意见。

10进一步的研究

我们今后在这方面研究的重点是改善支持各种可用的NoSQL系统,因为我们认为这个领域是IT界的大未来的支持。此外,我们的目标是通过融合数据和视图的缓存技术来改进渲染引擎的速度。

另一个重要的步骤是推出开源社区项目,以构建更多的测试用例程序来生成有效的结果。这些结果将被用于进一步优化平台。此外,我们的目标是支持由社区构建的软件包,以进一步扩展平台。


转载于:https://my.oschina.net/zhouyang2021/blog/424681

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值