共同理念:将视图设计与数据持久化分离,降低耦合度,易于扩展,提升开发效率。
很多人误以为MVC就是以往使用的三层体系结构(3-Tier),其实两者是不同的。一般而言,三层体系结构分为表示层(Presentation)、商业逻辑层(Business Logic)、数据访问层(Data Access)。MVC三部分并不能直接对应这所谓的三层体系结构。
三层架构(3-Tier Application)是一种软件抽象的层次结构,是对复杂系统的一种纵向切分,每一层中完成同一类型的操作,将各种代码一起完成的使命作为依据来分割,以降低复杂度,提供可维护性。
一般来说,层次之间是向下依赖的,下层在未确定接口(契约)规范前,上层代码无法开发,下层代码接口的变化将使上层一起变化。
为实现“高内聚,低耦合”,将整个业务应用划分为三层,其目的是为了解耦。
三层架构是一个分层式的软件体系架构设计,可适用于任何项目。架构设计是用来指导软件、系统等各个方面的设计。MVC作为一种设计范式,是根据项目具体需求来决定是否适用。设计模式(Design Pattern)是指一套被反复使用,多人知晓,经过分类的,代码设计经验的总结。使用设计模式的目的是为了代码的可重用性,让代码更容易被他人理解,并能保证代码的可靠性。
具体而言,三层架构是为了解决整个应用程序中各个业务操作过程中的不同阶段的代码封装问题,为了使程序员更加专注的处理某阶段的业务逻辑。比如,将数据库操作代码封装到一层,提供方法根据参数直接返回用户所需的数据。这样,在处理具体的业务逻辑的时候,就无需关心数据的存储问题了。
MVC是Model-View-Controller,MVC把三层架构中的UI层再度分割形成模型、视图、控制器。控制器完成页面逻辑、通过模型与界面通信,控制器则直接与三层架构中的业务逻辑层BLL对话。
MVC是一种复合设计范式,一种在特定场合用于解决某种实际问题得出的可以反复实践的解决方案。首先MVC中三者并不存在明显的层次结构,没有明显的向下依赖的关系。相反的是View和Model往往是比较独立的,而Controller则是两者的桥梁。
MVC更像是横向的切分,MVC每块都可以独立测试。而在三层架构中,上层模块的运行测试势必要提供下层代码或相同接口。MVC的目的是实现Web系统(BS结构)的职能分工,即职责划分。
MVC中每块内部,特别是Model,经常被设计为多层的。
数据模型Model用于封装与应用程序在商业逻辑上相关的数据,以及对其数据操作的处理方法。
数据模型Model并不依赖于Controller和View, 也就是说Model无需知道它将如何显示或如何被应用,仅需专注于做好数据库访问、定义、验证的责任即可。
ASP.NET 中 Model 常用的技术
ASP.NET MVC推荐使用强类型的方式设计Model,才可以有效地利用内建的模型绑定(Model Binding)与模型验证机制。
Controller的角色介于用户接口层和商业逻辑层之间,属于分水岭的角色。
在项目初期设计时,建议将用户接口层和商业逻辑层明确地分离开,后续开发商会比较顺手。
ASP.NET MVC是微软发布的网站开发架构,为了解决传统ASP.NET开发中不能分离MVC而设计。
MVC中页面代码并不与后台对应,而是分别存放在Controller和View中。
MVC可让开发者分割出不同方面的应用程序(输入逻辑、商业逻辑、显示逻辑),并在这些分割出来的应用程序中提供松散的关联。
关注点分离(Separation of Concerns, SOC)是AOP(Aspect-Oriented Programming, 面向切面编程)中的概念。AOP是面向侧面的程序设计或面向方面的程序设计,是对面向对象程序设计的改进和扩展。
SOC是ASP.NET MVC开发中很重要的原则,简单来说就是“只注意需要注意的”。这是处理复杂逻辑的原则,因为将太多个关注点凑在一起,势必造成复杂度的大幅增加,处理复杂逻辑时若能将关注点分离开来各个击破,相对来说会比全部一起处理要容易。
当一件事情被细分为各个单元后,各个单元的复杂度将相对降低,复杂度降低后问题就更容易理解,理解后当然就更容易开发。
ASP.NET MVC中使用了约定优于配置(Convention over Configuration)的软件设计原则来规范这种共同约定。约定优于配置的概念简单来说,就是利用约定(Convention)来取代复杂的配置(Configuration)。
例如: