ASP.NET MVC5 学习系列之初探MVC

1、由问题看本质

(一)什么是MVC?
MVC是Model-View-Controller的简称。它是在1970年引入的软件设计模式。MVC 模式强迫关注分离 — 域模型和控制器逻辑与UI是松耦合关系。从而使应用程序的维护和测试更加简单容易。html


(二) 解释一下MVC设计模式?jquery

MVC模式

 MVC 设计模式将应用程序分解成3个主要部分: Model, View, Controller(模型、视图、控制器)程序员

Model - 模型表明一系列类用来描述业务逻辑,好比业务模型以及数据访问操做,再好比数据模型。同时也定义了对数据如何进行处理的业务规则。web

View - 视图表明的是UI部分,像CSS、jquery、html等。它主要的职责是展示从controller接受到数据或模型。数据库

Controller - 控制器职责在于处理传入的请求。它接受用户经过视图的输入,而后对用户输入的数据模型进行处理,最终经过视图将结果渲染给用户。一般来说,控制器在视图和模型之间扮演着桥梁(协调者)的角色。设计模式


(三) 什么是领域驱动设计开发?
Domain-Driven Design (DDD)定义了一系列的准则和模式从而时开发者针对不一样的领域采起合适的设计方案以开发出优美的系统。DDD既不是一项技术也不是一套方法论。DDD主要由Entity, Value Object, Aggregate, Service, Repository五大部分组成。
Entity(实体):具备惟一标志的对象,好比用户。
Value Object(值对象):不具备惟一标志的对象,好比枚举。一个值对象也能够是一个实体视状况而定。
Aggregate(聚合): 它经过定义对象之间清晰的所属关系和边界来实现领域模型的内聚,并避免了错综复杂的难以维护的对象关系网的造成。聚合定义了一组具备内聚关系的相关对象的集合,咱们把聚合看做是一个修改数据的单元。领域模型:聚合、聚合根详解
Service(服务):服务是在应用程序中用来处理业务逻辑的。
Repository(仓储):仓储的做用是数据的存储读取,即封装数据持久化框架。它不关心使用何种数据库。仓储也不是咱们常说的Data Access Layer(数据操做层),可是为了安全因素,仓储会引用一个位置进行存储。仓储的主要职责是处理聚合的和持久化相关的任务(ADD、UPDATE、DELETE、GET)。浏览器


(四)解释一下MVP模式?缓存

MVP 模式

MVP与MVC类似,只是将MVC的Controller替换成Presenter。MVP模式将应用程序分解成3个主要部分: Model, View, Presenter。安全

Model - 模型表明一系列类用来描述业务逻辑,好比业务模型以及数据访问操做,再好比数据模型。同时也定义了对数据如何进行处理的业务规则。架构

View - 视图表明的是UI部分,像CSS、jquery、html等。它主要的职责是展示从controller接受到数据或模型。

Presenter - 职责在于处理视图上的UI行为事件。经过View接收用户输入,而后经过Model处理用户数据,而后将结果传回view。不想View和Controller,View和Presenter之间彻底解耦,是经过接口进行交互。同时它也不处理和接收传入的请求。

MVP模式一般用在Asp.net Web Form、Windows Form 应用程序
MVP模式的关键点:

  1. 用户与View直接交互.

  2. View与Presenter是1对1关系,一个View对应一个Presenter

  3. View 与 Model 不发生联系,都经过 Presenter 传递。

  4. 各部分之间的通讯,都是双向的。

  5. View 很是薄,不部署任何业务逻辑,称为"被动视图"(Passive View),即没有任何主动性,而 Presenter很是厚,全部逻辑都部署在那里。


(五)解释一下MVVM 模式?

MVVM模式

 MVVM 是指 Model-View-View Model. MVVM支持在View与ViewModel之间进行双向数据绑定。经过视图模型的状态就可以自动的传播改动到View。一般来讲,ViewModel是经过观察者模式将ViewModel的改动通知到View。
Model - 模型表明一系列类用来描述业务逻辑,好比业务模型以及数据访问操做,再好比数据模型。同时也定义了对数据如何进行处理的业务规则。

View - 视图表明的是UI部分,像CSS、jquery、html等。它主要的职责是展示从controller接受到数据或模型。

View Model - ViewModel 的职责是暴露方法、命令以及属性去维护View的状态,操纵Model 做为View执行的结果,以及触发View上自身的事件。

MVVM模式的关键点:

  1. 用户与View直接交互。

  2. View与ViewModel是1对多关系,一个View能够对应多个ViewModel。

  3. View保存一个对ViewModel的引用,可是ViewModel对于View一无所知。

  4. View和ViewModel之间的数据绑定是双向的。

Angular就是使用这种模式。


(六) 什么是 ASP.NET MVC?
Ans. ASP.NET MVC 是一套基于Microsoft .NET Framework的用来开发web应用程序的开源框架。它确保了代码的干净整洁且关注分离. ASP.NET MVC framework 具备很好的扩展性以及支持自定义。


(七)MVC模式在ASP.NET下是如何工做的?
Ans. 咱们按照Model、View、Controller的顺序来一一解释:
The Model in ASP.NET MVC
ASP.NET MVC 中的Model能够分解成几个不一样的层:

  1. Objects or ViewModel or Presentation Layer - 这一层包含的简单对象或复杂的对象用来进行特定的强类型View的展现。这些对象用来从Controller传递数据到强类型的View,反之亦然。这些对象对应的类经过数据注解指定定的验证规则。一般来讲,这些类拥有你想要展现到对应View/Page的属性。

  2. Business Layer - 主要用来实现业务逻辑和数据验证。同时经过数据访问层(DAL)将数据持久化到数据库。这一层被Controller直接调用去处理用户输入并将结果返回到View

  3. Data Access Layer - 提供对象去访问和操做数据库。一般来讲,这一层主要使用一些ORM框架好比EF、NHibernate。


    MVC pattern in ASP.NET MVC

The View in ASP.NET MVC
View就是展现从Controller传递的数据。同时肩负着将Model进行转换以在View的UI上进行展现。
The Controller in ASP.NET MVC
响应Http请求并根据传入的请求内容决定由哪一个具体的Action去处理。它经过View接收用户输入,而后经过Model的帮助去处理用户数据并将结果返回给View.


(八)ASP.NET MVC相对于Web Forms的优点有哪些?
主要有如下几点优点:

      • Separation of concern(关注分离) - MVC设计模式将Asp.net MVC 应用程序分红三个部分,View、Controller、Model。更容易的去处理程序的复杂性问题。
      • TDD(测试驱动开发)- 更好的支持测试驱动开发。
      • Extensible and pluggable (扩展性好)- MVC支持可插拔、可扩展。所以更容易进行替换和自定义。
      • Full control over application behaviour (对应用程序的彻底控制)- MVC 不使用View State,且不依赖于Server。促使程序员能够更好的控制应用的行为同时减小对Server请求的带宽。
      • ASP.NET features are supported (强大Asp.net 功能支持)- MVC 框架是基于Asp.net 设计的,所以可使用Asp.ent包含大部分功能,好比认证、受权,权限和角色控制、缓存、Session等。
      • URL routing mechanism (路由机制)- MVC 框架提供了一个强大的Url路由机制,以便咱们构建易理解易搜索的URLS。这个路由机制提升了应用程序的可访问性,同时利于搜索引擎优化。

(九)三层架构与MVC架构的区别在哪?

三层架构

三层架构是一个线性的架构,主要包括:展示层、业务逻辑层、数据访问层。用户直接与展示层交互。
MVC架构是一个三角形架构,将应用程序分红三个部分,Model、View、Controller。用户在View的帮助下与Controller交互。
MVC不会替换掉三层架构;每每三层架构与MVC是一块儿使用的,MVC扮演三层架构中的展示层。
MVC架构


(十)ASP.NET WebForm 与 ASP.NET MVC的区别是什么?
主要的区别详细见下表:

Web Forms MVC
事件驱动开发模型 轻量级的基于MVC模型的开发模型
服务端控件 Html Helper
状态管理技术(View State、Session) 没有自动的状态管理
基于文件路径的路由 基于路由的Urls
遵循WebFrom语义 遵循Razor引擎语义
View与业务逻辑紧耦合(.aspx,.aspx.cs) View与业务逻辑分离
经过Master Page(母板页)进行统一布局 使用Layout 统一布局
经过User Controls 进行重用 经过Partial View进行重用
有内置的数据控件,操做数据比较方便 轻量级的,提供全面的控制标记和支持许多功能,容许快速和敏捷发展。所以,它是最好的用最新的Web标准开发Web交互应用程序。
非开源 开源

2、ASP.NET MVC简单入门

1.一、MVC概念

视图(View)

表明用户交互界面,对于Web应用来讲,能够归纳为HTML界面,但有可能为XHTML、XML和Applet。

模型(Model)

表示用户对其数据的操做的一个封转。能够分为视图模型(view model)和领域模型(domain models),视图模型就是在视图与控制器之间传输数据的一个封转,而领域模型就是业务逻辑,后台数据模型等的一个集合。是咱们学的3层中的BLL,DAL,Models的集合

控制器(Controller)

控制器能够理解为从用户接收请求,将模型与视图匹配在一块儿,共同完成用户的请求。

1.二、ASP.NET MVC 原理

当在浏览器中输入一个URL,进入了Route系统,路由系统获得URL各个片断的值,并交给MVC处理,MVC依据URL的信息知道请求的Action,接着就对模型进行一系列的处理,而后呈现视图。

MVC对控制器与View有必定的限制,但对模型没有任何的限制。

控制器必须实现IController接口或者继承Controller类,控制器类中的公有方法称之为Action Method。

1.三、MVC项目结构及含义

1.四、MVC命名习惯

在MVC项目中有2种习惯

a、建议你如何组织项目中的一些文件,好比js文件放在Scripts文件夹下,像这种习惯,你彻底能够不遵循,这些文件夹和文件删除并不影响MVC框架自己。

b、另一种,有个专门的术语:”Convention over configuration”,意思就是说若是你遵循了这个习惯就不须要进行额外的配置或编码(特别是控制器与视图)。这种习惯就尽可能遵循,若是违反,在MVC中就须要作许多的事情。

主要有3个方面:

a、控制器命名习惯:控制器类必须以Controller结尾,但引用这个控制器的时候能够省略掉Controller,若是想改变这种行为,须要本身实现IControllerFactory接口,默认是经过DefaultControllerFactory来执行这个控制器的查找的。

b、视图命名习惯:视图或者分部视图应该放在/Views/Controllername文件夹下面,好比一个控制器为Demo 那么这个控制器的全部视图应该放在/Views/Demo/下面,默认状况下,每个Action Method对应一个视图,尽

量让视图名字与Action名字同样,这样在Action中就能够直接return View();而放在Shared文件夹下面的视图全部的控制器均可以使用

c、布局命名习惯:布局文件都如下划线开头,并放置在shared文件夹下面,在MVC 3中默认每一个视图都会用到_layout.cshtml布局,能够在_viewstart.cshtml看到这个设置

1.五、ASP.NET MVC优缺点

优势:

A、具备多个视图对应一个模型的能力。

B、因为一个应用被分离为三层,所以有时改变其中的一层就能知足应用的改变。一个应用的业务流程或者业务规则的改变只需改动MVC的模型层。

C、它还有利于软件工程化管理。因为不一样的层各司其职,每一层不一样的应用具备某些相同的特征,有利于经过工程化、工具化产生管理程序代码。

缺点:

A、增长了系统结构和实现的复杂性。

B、视图与控制器间的过于紧密的链接。

C、视图对模型数据的低效率访问。

相关文章
相关标签/搜索