Asp.net mvc 知多少(一)

本系列主要翻译自《ASP.NET MVC Interview Questions and Answers 》- By Shailendra Chauhan,想看英文原版的可访问http://www.dotnettricks.com/free-ebooks自行下载。该书主要分为两部分,ASP.NET MVC 5、ASP.NET WEB API2。本书最大的特点是以面试问答的形式进行展开。通读此书,会帮助你对ASP.NET MVC有更深层次的理解。
由于个人技术水平和英文水平也是有限的,因此错误在所难免,希望大家多多留言指正。

系列导航
Asp.net mvc 知多少(一)
Asp.net mvc 知多少(二)
Asp.net mvc 知多少(三)
Asp.net mvc 知多少(四)
Asp.net mvc 知多少(五)
Asp.net mvc 知多少(六)
Asp.net mvc 知多少(七)

本节主要讲解MVC的基本概念

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


Q2. 解释一下MVC设计模式?

MVC模式

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

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

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

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


Q3. 什么是领域驱动设计开发?
Ans. 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)。

MSDN关于DDD的介绍


Q4. 解释一下MVP模式?

MVP 模式

Ans. 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非常厚,所有逻辑都部署在那里。


Q5. 解释一下MVVM 模式?

MVVM模式

Ans. 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就是使用这种模式。


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


Q7. 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.


Q9. ASP.NET MVC相对于Web Forms的优势有哪些?
Ans. 主要有以下几点优势:

  • 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。这个路由机制提高了应用程序的可访问性,同时利于搜索引擎优化。


Q10. 简要介绍下ASP.NET MVC的版本更新?
Ans. 以下是ASP.NET MVC的主要版本及版本特性:
ASP.NET MVC1

  • 2009-3-13 发布

  • 基于 .NET 3.5、Visual Studio 2008 、Visual Studio 2008 SP1运行

  • 基于WebForm引擎的MVC模式架构

  • Html Helpers

  • Ajax helpers

  • Routing

  • Unit Testing

ASP.NET MVC2

  • 2010-3-10发布

  • 基于 .NET 3.5, 4.0,Visual Studio 2008 & 2010运行

  • 基于lambda表达式强类型的HTML帮助器方法

  • Templated Helpers(模板帮助器)

  • UI helpers 支持自动脚手架功能及自定义模板

  • 支持DataAnnotations属性注解以支持客户端服务端双重数据验证

  • 重载了HTTP谓词 GET, PUT, POST, and DELETE

  • Areas

  • 异步控制器

ASP.NET MVC3

  • 2011-1-13发布

  • 基于 .NET 4.0 、Visual Studio 2010运行

  • Razor view engine

  • 加强了数据验证

  • Remote Validation(远程验证)

  • Compare Attribute(比较属性)

  • Session less Controller

  • Child Action Output Caching

  • Dependency Resolver(依赖注入)

  • 支持 Entity Framework Code First

  • Partial-page output caching

  • 添加了ViewBag动态属性以支持Controller与View间的数据传递

  • Global Action Filters

  • 更好的Javascript支持: 非侵入式JavaScript, jQuery 验证, JSON 绑定

  • 使用 NuGet 平台去交付和管理依赖

ASP.NET MVC4

  • 2012-8-15发布

  • 基于.NET 4.0, 4.5 、Visual Studio 2010SP1 & Visual Studio 2012运行

  • ASP.NET WEB API

  • 对默认的项目模板进行更新和加强

  • 提供了基于Jquery Mobile的移动项目模板

  • Display Models

  • Task support for Asynchronous Controllers

  • Bundling and minification(捆绑和微小)

  • 支持 Windows Azure SDK

ASP.NET MVC5

  • 2013-10-17发布

  • 基于 .NET 4.5, 4.5.1& Visual Studio 2012 & Visual Studio 2013运行

  • One ASP.NET

  • ASP.NET Identity

  • ASP.NET Scaffolding

  • Authentication filters(身份验证过滤器 - ASP.NET MVC管道中的授权过滤器之前运行)

  • 引入了Bootstrap

  • ASP.NET WEB API2


Q11. 三层架构与MVC架构的区别在哪?

三层架构

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


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

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

主要区别

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/282844.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

stm32h7能跑linux,STM32H7榨干了Cortex-M7的最后一滴血

原标题:STM32H7榨干了Cortex-M7的最后一滴血有个非常重磅的消息ST给自己的STM32家族又新增了一条新的产品线—— H7H 代表的是High Pefrmance之意 (此为笔者臆测)7 则表示这是基于ARM Cortex-M7架构修改而来熟悉的工程师可能会问,不是已经有基于M7架构的…

通过PowerShell进行网络分析

好久没有写文章,因为确实工作也比较忙。今天周末,稍微有些时间,在解决一个问题时,用到了一点抓取和处理网络数据的小技巧,摘录分享如下。问题描述我有一个需求,就是要研究某个网页加载过程中具体发起了多少…

c语言不规则窗口,C语言不规则数组和指针

不规则数组是每一行的列数不一样的二维数组,其原理如下图所示,图中的数组有3行,每行有不同的列数。在了解如何创建不规则数组之前,让我们先看一下用复合字面量创建的二维数组。复合字面量是一种C构造,前面看起来像类型…

php spl_autoload_register() 函数

spl_autoload_register()的用法: 其中$this表示当前类,autoload()是我注册的自动加载函数,当然这个只是一个函数名,只要不与php的关键字重复,符合一般函数名的命名规范即可。 使用自动加载之后,当我们在一个…

C语言中递归什么时候能够省略return引发的思考:通过内联汇编解读C语言函数return的本质...

C语言中递归什么时候能够省略return引发的思考:通过内联汇编解读C语言函数return的本质 事情的经过是这种,博主在用C写一个简单的业务时使用递归,因为粗心而忘了写return。结果发现返回的结果依旧是正确的。经过半小时的反汇编调试。证明了我…

C# 为什么说CM+Fody+HC是WPF开发的最强组合?

01—名词解析CM:Caliburn.Micro(简称CM)一经推出便备受推崇,作为一款MVVM开发模式的经典框架,越来越多的受到wpf开发者的青睐.我们看一下官方的描述:Caliburn是一个为Xaml平台设计的小型但功能强大的框架。Micro实现了各种UI模式&…

c语言逻辑运算符两侧运算对象,逻辑运算符两侧运算对象的数据类型是什么?...

逻辑运算符两侧运算对象的数据类型:可以是任何合法的类型数据;因为逻辑运算符两边的运算对象,最终都被转换成bool值(逻辑值)操作。0、null转换为false,而所有非零、非false、非null值转换为true;然后进行运算。逻辑运算…

创建相似对象,就交给『工厂模式』吧

源码&#xff1a; 源代码C# 系列导航&#xff1a; 目录 定义&#xff08;Factory Pattern&#xff09;&#xff1a; 用来创建目标对象的类&#xff0c;将相似对象的创建工作统一到一个类来完成。 一、简单工厂模式&#xff1a; 代码&#xff1a; /// <summary>/// 产品枚…

《ASP.NET Core 6框架揭秘》实例演示[26]:跟踪应用接收的每一次请求

很多人可能对ASP.NET Core框架自身记录的诊断日志并不关心&#xff0c;其实这些日志对纠错排错和性能监控提供了很有用的信息。如果需要创建一个APM&#xff08;Application Performance Management&#xff09;系统来监控ASP.NET Core应用处理请求的性能及出现的异常&#xff…

阿里云Maven镜像配置

2019独角兽企业重金招聘Python工程师标准>>> <mirror><id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> …

WPF 实现弹幕效果

WPF 实现弹幕效果控件名&#xff1a;BarrageExample作者&#xff1a;WPFDevelopersOrg原文链接&#xff1a; https://github.com/WPFDevelopersOrg/WPFDevelopers框架使用大于等于.NET40&#xff1b;Visual Studio 2022;项目使用 MIT 开源许可协议&#xff1b;此篇代码目的只…

WPF效果第一百九十八篇之模块对比

前面效果中分享了彩色马蹄图的效果和范围内拖拽;这不大假期的时间反正没啥事就在家撸代码;今天又是LisBox实现的效果,看最终效果:1、刚开始一朋友说用DataGrid来实现.首先把行对象转换成列对象,至于控制列的话,就后台重新赋值对象来控制前台.我是觉得太费劲直接放弃了;还是首选…

saltstack的状态文件

saltstack状态文件设定&#xff1a;编辑/etc/salt/master&#xff0c;修改其中关于“设置文件的目录”的设置&#xff1a;说明&#xff1a;注意语法格式&#xff0c;顶格/冒号/两个空格state_top: top.sls # The state system uses a "top" file to tell the minions…

【Shashlik.EventBus】.NET 事件总线,分布式事务最终一致性简介

分布式事务、CAP定理、事件总线&#xff0c;在当前微服务、分布式、集群大行其道的架构前提下&#xff0c;是不可逃避的几个关键字&#xff0c;在此不会过多阐述相关的理论知识。Shashlik.EventBus就是一个基于.NET6的开源事件总线解决方案&#xff0c;同时也是分布式事务最终一…

5个超实用的Visual Studio插件

工欲善其事&#xff0c;必先利其器,整理的一些我必装的5款Visual Studio插件&#xff0c;希望你们能get到。01 CodeMaidCodeMaid快速整理代码文件&#xff0c;规范你的代码&#xff0c;提高代码阅读体验。代码自动对齐&#xff0c;格式化代码&#xff08;ps&#xff1a;不用再按…

BZOJ1509: [NOI2003]逃学的小孩(树的直径)

Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1126 Solved: 567[Submit][Status][Discuss]Description Input 第一行是两个整数N&#xff08;3  N  200000&#xff09;和M&#xff0c;分别表示居住点总数和街道总数。以下M行&#xff0c;每行给出一条街道的信息。第i1行…

Lombok@Builder和@NoArgsConstructor冲突

问题 今天在使用lombok简化model类时。使用Builder建造者模式。报以下异常 解决办法。 去掉NoArgsConstructor添加AllArgsConstructor源码分析 下图是编译后的源码 只使用Builder会自动创建全参构造器。而添加上NoArgsConstructor后就不会自动产生全参构造器

ntop linux,Linux下开源监控软件Ntop的性能提升方案

摘要&#xff1a;Ntop是一款Linux下常见的开源监控软件&#xff0c;它可以监测的数据包括&#xff1a;网络流量、使用协议、系统负载、端口情况、数据包发送时间等。正常情况下它工作的时候就像一部被动声纳&#xff0c;默默的接收看来自网络的各种信息&#xff0c;通过对这些数…

性能优化8--内存泄露

一.根源&#xff1a; 内存泄露简单说就是已经没有用的资源&#xff0c;但是由于被其他资源引用着无法被GC销毁。 二.内存泄露常见场景 1.单例导致内存泄露 单例的静态特性使得它的生命周期同应用的生命周期一样长&#xff0c;如果一个对象已经没有用处了&#xff0c;但是单例还…

记一次 .NET 某打印服务 非托管内存泄漏

一&#xff1a;背景 1. 讲故事前段时间有位朋友在微信上找到我&#xff0c;说他的程序出现了内存泄漏&#xff0c;能不能帮他看一下&#xff0c;这个问题还是比较经典的&#xff0c;加上好久没上非托管方面的东西了&#xff0c;这篇就和大家分享一下&#xff0c;话不多说&#…