MVC框架

MVC架构将应用分为三层—模型,视图,控制,MVC架构是交互式应用中广泛使用的架构。它将对象按功能进行划分,把一个应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离,尽可能地最小化对象之间的耦合度。

大部分Web应用程序都是用像ASPPHP,或者CFML这样的过程化(PHP5.0版本后已全面支持面向对象模型)语言来创建的。它们将像数据库查询语句这样的数据层代码和像HTML这样的表示层代码混在一起。经验比较丰富的开发者会将数据从表示层分离开来,但这通常不是很容易做到的,它需要精心的计划和不断的尝试。MVC从根本上强制性的将它们分开。尽管构造MVC应用程序需要一些额外的工作,但是它给我们带来的好处是无庸质疑的。

二 什么是MVC

MVC是一个设计模式,它使应用程序的输入、处理和输出强制性分开,使得软件可维护性、可扩展性、灵活性以及封装性得到提高。使用MVC应用程序被分成三个核心部件:M(模型)、V(视图)、C(控制器)。模型是所有的商业逻辑代码片段所在。视图表示数据在屏幕上的显示。控制器提供处理过程控制,它在模型和视图之间起连接作用。控制器本身不输出任何信息和做任何处理,它只负责把用户的请求转成针对Model的操作,和调用相应的视图来显示Model处理后的数据。

2.1 模型(Model

模型(Model)就是业务流程/状态的处理以及业务规则的制定。业务流程的处理过程对其它层来说是黑箱操作,模型接受视图请求的数据,并返回最终的处理结果。业务模型的设计可以说是MVC最主要的核心。模型表示企业数据和业务规则。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据。由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。

MVC并没有提供模型的设计方法,而只告诉你应该组织管理这些模型,以便于模型的重构和提高重用性。我们可以用对象编程来做比喻,MVC定义了一个顶级类,告诉它的子类你只能做这些,但没法限制你能做这些。这点对编程的开发人员非常重要。   业务模型还有一个很重要的模型那就是数据模型。数据模型主要指实体对象的数据 保存(持续化)。比如将一张订单保存到数据库,从数据库获取订单。我们可以将这个模型单独列出,所有有关数据库的操作只限制在该模型中。

2.2 视图(View

视图(View)是用户可以看到并与之交互的界面。视图就是由HTML元素组成的界面,HTML依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷,它们包括MacromediaFlash、XHTML、XML/XSL、WML等一些标识语言和Web Services等。

如何处理应用程序的界面变得越来越有挑战性。MVC有一个突出的优点是能为应用程序处理很多不同的视图,在视图中其实没有真正的处理发生,不管这些数据是联机存储的还是本地储存,作为视图来讲,它只是作为一种输出数据并允许用户操纵的方式。

2.3 控制(Controller

控制(Controller)可以理解为从用户接收请求将模型与视图匹配在一起,共同完成用户的请求。划分控制层的作用也很明显,它清楚地告诉你,它就是一个分发器,选择什么样的模型,选择什么样的视图,可以完成什么样的用户请求。控制层并不做任何的数据处理。控制器接收用户的请求,并决定应该调用哪个模型来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制器用相应的视图格式化模型返回的数据,并通过表示层呈现给用户。

三 为什么要使用MVC架构

3.1环境

ASP.NET提供了一个很好的实现这种经典设计模式的环境。程序人员通过在ASPX页面中开发用户接口来实现视图,控制器的功能在逻辑功能代码(.cs)中实现,模型通常对应系统的业务部分。在ASP.NET中实现这种设计而提供的一个多层系统,将数据(模型)从对其操作的动作(控制器)分离出来可以设计一个与后台存储数据无关的系统,就MVC结构的本质而言,它是一种解决耦合系统问题的方法。

在ASP.NET中编写MVC模式具有极其良好的可扩展性。它可以轻松实现以下功能:

1. 实现一个模型的多个视图

2. 采用多个控制器

3. 当模型改变时,所有视图将自动刷新

4. 所有的控制器将相互独立工作

这就是MVC架构的好处,只需在以前的程序上稍作修改或增加新的类,即可增添程序的功能。以前开发的类可以重用,而程序结构根本不再需要改变,各类之间相互独立,便于团体开发,提高开发效率。

3.2 优点

低耦合性,视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码,同样,一个应用的业务流程或者业务规则的改变只需要改动MVC的模型层即可。因为模型与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则。

1、提高代码重用率

最重要的一点是多个视图能共享一个模型,无论用户想要Flash界面或是WAP界面;用一个模型就能处理它们。由于已经将数据和业务规则从表示层分开,所以可以最大化的重用代码。

2、提高程序的可维护性

因为模型是自包含的,并且与控制器和视图相分离,所以很容易改变数据层和业务规则。例如,把数据库从SQLServer移植到Oracle,只需改变模型即可。一旦正确的实现了模型,不管数据来自哪里,视图都会正确的显示它们。MVC架构的运用,使得程序的三个部件相互对立,大大提高了程序的可维护性。

3、有利于团队开发

在开发过程中,可以更好地分工,更好地协作。有利于开发出高质量的软件。良好的项目架构设计,将减少编码工作量。采用MVC结构和代码生成器,是大多数Web应用程序的理想选择。部分模型(Model)和存储过程一般可用工具自动生成。控制器(Controller)比较稳定,一般由架构师(或经验丰富程序人员)完成;那么整个项目需要手动编写代码的地方就只有视图(View)了。在这种模式下,个人能力不是特别重要,只要懂点语法基础的人都可以编写,无论项目成员写出什么样的代码,都在项目管理者的可控范围内。即使开放项目途中人员流动,也不会有太大问题。在个人能力不均衡的团队开发中,采用MVC开发是非常理想的。

另外,MVC架构可以实现一个模型、两个视图和一个控制器的程序。下面将讨论如何实现一个模型、两个视图和一个控制器的程序。其中模型类及视图类根本不需要改变,与前面的完全一样,这就是面向对象编程的好处。对于控制器中的类,只需要增加另一个视图,并与模型发生关联即可。

同样也可以实现其他形式的MVC。例如:一个模型、两个视图和两个控制器。从上面可以看出,通过MVC模式实现的应用程序具有极其良好的可扩展性,是ASP.NET面向对象编程的未来方向。

四 三层架构

所谓的三层开发就是将系统的整个业务应用划分为表示层——业务逻辑层——数据访问层,这样有利于系统的开发、维护、部署和扩展。

分层是为了实现“高内聚、低耦合”。采用“分而治之”的思想,把问题划分开来各个解决,易于控制,易于延展,易于分配资源。

表示层:负责直接跟用户进行交互,一般也就是指系统的界面,用于数据录入,数据显示等。意味着只做与外观显示相关的工作,不属于他的工作不用做。

业务逻辑层:用于做一些有效性验证的工作,以更好地保证程序运行的健壮性。如完成数据添加、修改和查询业务等;不允许指定的文本框中输入空字符串,数据格式是否正确及数据类型验证;用户的权限的合法性判断等等,通过以上的诸多判断以决定是否将操作继续向后传递,尽量保证程序的正常运行。

数据访问层:顾名思义,就是用于专门跟数据库进行交互。执行数据的添加、删除、修改和显示等。需要强调的是,所有的数据对象只在这一层被引用,如System.Data.SqlClient等,除数据层之外的任何地方都不应该出现这样的引用。

五 MVC缺点

MVC的缺点体现在以下几个方面:

1、增加了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。

2、视图与控制器间的过于紧密的连接。视图与控制器是相互分离,但又紧密联系的部件,如何视图没有控制器的存在,那它的应用是很有限的,反之亦然,这样就妨碍了它们的独立重用。

3、视图对模型数据的低效率访问。依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。

4、目前,一般高级的界面工具或构造器不支持MVC架构。改造这些工具以适应MVC需要和建立分离的部件的代价是很高的,从而造成使用MVC的困难。[1]

六 小结

软件系统发展到今天已经很复杂了,特别是服务器端软件,设计到的知识,内容,问题太多。在某些方面使用别人成熟的框架,就相当于让别人帮你完成一些基础工作,只需要集中精力完成系统的业务逻辑设计。而且框架一般是成熟,稳健的,他可以处理系统很多细节问题,比如,事物处理,安全性,数据流控制等问题。还有框架一般都经过很多人使用,所以结构很好,所以扩展性也很好,而且它是不断升级的,可以直接享受别人升级代码带来的好处。

MVC架构为了实现“高内聚、低耦合”。把问题划分开来各个解决,易于控制,易于延展,易于分配资源。它使应用程序的输入、处理和输出强制性分开,使得软件可维护性、可扩展性、灵活性以及封装性得到提高。

参考文献

 [1] 龚赤兵.Web开发新体验:ASP.NET 3.5 MVC架构与实战[M].电子工业出版社.2009

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值