模型-视图-控制器(ModalViewController,MVC)是XeroxPARC在1980年代为编程语言Smalltalk-80发明的一种软件设计模式,至今被广泛使用。近年来,它被推荐为Sun的J2EE平台的设计模式,受到越来越多使用ColdFusion和PHP的开发者的欢迎。模型-视图-控制器模式是一个有用的工具箱,它有很多好处,但也有一些缺点。MVC最初存在于Desktop程序中,M指数据模型,V指用户界面,C指控制器。使用MVC的目的是将M和V的实现代码分开,使同一个程序可以使用不同的表现形式。例如,您可以使用直方图和饼图来表示一批统计数据。C的目的是保证M和V的同步,一旦M发生变化,V也要同步更新。1.MVC的工作原理MVC是一种强制分离应用程序输入、处理和输出的设计模式。使用MVC的应用程序分为三个核心组件:模型、视图和控制器。他们各自处理自己的任务。1.视图视图是用户看到并与之交互的界面。对于老式的Web应用程序,视图是由HTML元素组成的界面。在新型的网络应用程序中,HTML在视图中仍然扮演着重要的角色,但一些新技术也相继涌现,包括MacromediaFlash和一些标记语言,如XHTML、XML/XSL、WML和Web服务。视图是网页前端的主要链接。如何处理应用程序的界面变得越来越具有挑战性。MVC的一大好处是它可以为您的应用程序处理许多不同的视图。视图中实际上没有发生任何实际处理,无论数据是在线存储还是员工列表,作为视图,它只是一种输出数据并允许用户对其进行操作的方式。2.模型模型代表企业数据和业务规则。在MVC的三个组件中,模型的处理任务最多。例如,它可能使用组件对象(如EJB和ColdFusion组件)来处理数据库。模型返回的数据是中性的,即模型与数据格式无关,这样一个模型可以为多个视图提供数据。减少了代码重复,因为应用于模型的代码只编写一次并被多个视图重用。3.控制器控制器接受用户的输入,调用模型和视图来完成用户的需求。因此,当单击网页中的超链接并发送HTML表单时,控制器本身不会输出任何内容或进行任何处理。它只是接收请求并决定调用哪个模型组件来处理请求,然后确定使用哪个视图来显示模型处理返回的数据。下面我们总结一下MVC的处理过程。首先,控制器接收到用户的请求,决定调用哪个模型进行处理。然后模型使用业务逻辑处理用户的请求并返回数据。最后,controller使用相应的view格式化model并返回数据,通过表示层呈现给用户。二、为什么要使用MVC大多数Web应用程序都是使用ASP、PHP或CFML等过程化语言创建的。他们将数据库查询等数据层代码与HTML等表示层代码混合在一起。更有经验的开发人员会将数据与表示层分离,但这通常并不容易做到,需要仔细规划和不断试错。MVC从根本上强制它们分离。虽然构建一个MVC应用程序需要一些额外的工作,但是它给我们带来的好处是毋庸置疑的。首先也是最重要的,多个视图可以共享一个模型,正如我提到的,现在有越来越多的方法来访问您的应用程序。对此的解决方案之一是使用MVC,无论您的用户想要Flash界面还是WAP界面;一个模型可以处理所有这些问题。由于您已将数据和业务规则与表示层分离,因此可以最大限度地重用您的代码。由于模型返回的数据没有格式化,所以同一个小部件可以被不同的接口使用。例如,很多数据可能用HTML表示,但也可能用MacromediaFlash和WAP表示。模型还具有状态管理和数据持久化处理的功能,例如,基于会话的购物车和电子商务流程也可以被Flash网站或无线网络应用程序重用。因为模型是自包含的并且与控制器和视图分离,所以很容易更改应用程序的数据层和业务规则。如果您想将数据库从MySQL迁移到Oracle,或者将基于RDBMS的数据源更改为LDAP,只需更改您的模型即可。一旦您正确地实现了模型,无论您的数据来自数据库还是LDAP服务器,视图都会正确显示它们。由于使用MVC的应用程序的三个组件是相互对立的,更改其中一个不会影响其他两个,因此您可以按照这种设计思想构建一个良好的松散耦合组件。对我来说,控制器还提供了一个好处,就是可以使用控制器连接不同的模型和视图来完成用户的需求,这样控制器就可以为构建应用程序提供强大的手段。给定一些可重用的模型和视图,控制器可以根据用户的需要选择模型进行处理,然后选择视图将处理结果显示给用户。三、MVC的缺点MVC的缺点是由于没有明确的定义,所以不太容易完全理解MVC。使用MVC需要仔细规划,并且由于其复杂的内部结构,需要一些时间来考虑。你将不得不花费相当多的时间来思考如何将MVC应用到你的应用程序中,并且由于模型和视图是严格分离的,这也给应用程序的调试带来了一定的困难。每个组件在使用前都需要经过彻底测试。一旦您的组件经过测试,您就可以毫无顾虑地重用它们。根据我个人的经验,由于我们将一个应用程序分为三个部分,使用MVC也意味着您将管理比以前更多的文件,这是显而易见的。这似乎增加了我们的工作量,但是请记住,这与它能给我们带来的好处相比,这简直是不值一提。MVC不适合小型甚至中型应用程序,花费大量时间将MVC应用于不是很大的应用程序通常是得不偿失的。4.MVC是创建软件的好方法。MVC设计模式是创建软件的好方法。它提倡的一些原则,比如内容和展示的分离,可能更好理解。但是如果你想隔离模型、视图和控制器组件,你可能需要重新考虑你的应用程序,尤其是应用程序的架构方面。如果你愿意接受MVC并有能力处理它带来的额外工作和复杂性,MVC将把你的软件在健壮性、代码重用和结构方面提升到一个新的水平。
