一、何谓MVC

1.MVC是开发时所使用的一种架构(框架)。

2.目的在于简化软件开发的复杂度,以一种概念简单却又权责分明的架构,贯穿整个软件开发流程,通过“商业逻辑层”与“数据表现层”的切割,让这两部分的信息切割开来,用以撰写出更模块话、可维护性高的程序代码。

3.MVC让软件开发的过程大致切割成三个主要单元,分别为:Model(模型)、View(视图)、Controller(控制器)。

(1)Model:负责定义信息格式与信息访问的界面,包括商业逻辑与信息验证。

(2)View:负责用户界面相关表现,包括输入与输出。例如显示HTML5网页、HTML表单域、显示XML文件等等。不要将商业逻辑与程序控制写在视图里。

(3)Controller:负责控制系统运行的流程、跟浏览器如何交互、决定网页操作的流程、响应客户端的各种要求、错误处理,等等。

二、为什么要ASP.NET MVC

1.关注点分离(Separation of Concerns, SoC)

当你在进行软件开发时,可以只关注在当前的对象上,一次仅关注于一个较容易理解与解决的部分,不会受到相同系统中其他对象的干扰,包括所有对对象的修正也不会影响其他对象的运作,进而专注于完成工作,如此一来,不但容易提升软件质量,还可加快程序代码理解的速度。MVC设计样式拥有非常清楚的关注点分离架构,使各种不同大小的网站更容易维护,也能因应不同的需求来变更,以加速项目开发并提高更好的客户满意度。

2.关注点分离的特性与优点

(1)简化复杂度

若能将复杂的问题,拆解成数个容易解决的单元,并且让你一次仅关注于一个较容易理解的部分,如此,自然能够简化软件开发的复杂度。而简化复杂度意味着程序代码数量变少,相对的也降低了程序错误(Bugs)出现的机率。

(2)可维护性大幅提升

在ASP.NET MVC里,不仅区分Model、View、Controller三种关注点,若项目越来越大,复杂度越来越高的话,你还可以再切割成更多层次,只要关注点能够清楚地分离,降低对象之间的耦合关系,相对的你也就越容易掌握项目的各个环节,这样便能让项目更易于维护。

(3)更容易测试

由于单元测试是软件测试的最小单位,以往开发人员在ASP.NET Web Form架构下并不容易撰写单元测试程序,不过采用ASP.NET MVC框架进行开发时,却非常适合撰写单元测试程序,若项目能不断强化关注点分离的特性,将能够更有效率地实施单元测试。也因为这点,选择ASP.NET MVC架构的团队,更适合采用测试导向开发方法(TDD)来进行项目建置,提升程序代码质量。

3.以习惯替换配置

以习惯替换配置(Convention over Configuration)是一种软件设计模式,主要目的在于减少开发人员在架构时所决策的时间以降低软件设计过于弹性,而导致太复杂的情况,通过约定俗成的“开发习惯”,让同一群开发人员得以共享同一套设计架构,减少思考时间,降低沟通成本,且不失软件开发的弹性。

ASP.NET MVC就是一个合理使用以习惯替换配置的开发框架,它通过MVC设计模式常见的规则,切割成Model、View、Controller三个部分,而且明确定义开发人员必须按照特定的“习惯”来开发程序。

4.MVC的优缺点

优点:

(1)清楚的关注点分离强迫你写出比Web Forms更容易维护的程序。(2)开放特性(完全开放源代码)(3)社群支持(当前国外社群非常活跃)。(4)可轻易地控制HTTP的输出属性

(5)优秀的开发效率。(6)易于测试的架构。(7)易于分工的架构。

缺点:

(1)相较于Web Forms来说,ASP.Net MVC较缺乏工具支持。(2)开发人员必须面对HTML、CSS与JavaScript在View页面上的配置,不像使用Web Forms开发网站时,即使不懂HTML、CSS、JavaScript也能开发网站。(3)缺乏成熟的组件化技术支持(Server Control、HTML Helper)。

5.开发ASP.NET MC项目时的建议

(1)不要重复自己

(2)没有完美的架构,只有适合的架构

(3)发挥“想象力”才能让开发更顺利

(4)适合的设计模式有助于提升架构质量

(5)切割你的脑袋,而且至少切成三份

(6)写程序、想架构,一定要有“感受”

(7)创建有责任感的物件

(8)对象合作要有所规范

(9)相信永远有更好的解决方法

(10)没有人可以将软件一次写对

(11)不要为了改变而改变,改变是为了适应未来

三、练习与分析

1.设计一个留言本管理系统,完成新建、显示留言功能。

  • 成绩排行榜

    • 第1名:陈力豪,38分钟

2.分析

(1)注意连接数据库的问题

(2)掌握CRUD的代码

(3)使用Razor语法输出属性,默认所有数据都会使用HTML编码(HtmlEncode)输出,这是出自于程序安全考虑,避免网页遭受跨网站脚本攻击(Cross-Site Scription Attach)

(4)@Html.ActionLink

•Html.ActionLink("linkText","actionName")
•Html.ActionLink("linkText","actionName","controlName")
•Html.ActionLik("linkText","actionName",routeValues),用来输出超链接,第一个参数是链接显示文字,第二个参数是链接的目的Action名称,第三个参数是代表路由参数id。
•Html.ActionLink("linkText","actionName",routeValues,htmlAttributes)
•Html.ActionLink("linkText","actionName","controlName",routeValues,htmlAttributes) 

(5)View里可能会编写一些程序逻辑,但仅限于编写与“显示”有关的逻辑为主,大部分的商业逻辑不应该写死在视图中,这样才能有效提升项目的维护能力。

(6)ASP.NET MVC网站的母版页面是_Layout.cshtml。

(7)所有ASP.NET Web应用程序运行的入口点在Global.asax的 Application_Start() 方法中

3.提问

如果首页只显示最近更新的5条留言,怎么改?

MVC-01 概述的更多相关文章

  1. MVC 01

    ASP.NET MVC 01 - ASP.NET概述 本篇目录: ASP.NET 概述 .NET Framework 与 ASP.NET ASP.NET MVC简介 ASP.NET的特色和优势 典型案 ...

  2. [MVCSharp]MVC# Overview概述

    MVC# Overview概述 Abstract: This article gives an overview of MVC# - a Model-View-Presenter framework ...

  3. 02 入门 - ASP.NET MVC 5 概述

    目录索引:<ASP.NET MVC 5 高级编程>学习笔记 本篇内容: 一.One ASP.NET 二.新的Web项目体验 三.ASP.NET Identity 四.Bootstrap 模 ...

  4. OAF_架构MVC系列1 - MVC的概述(概念)

     2015-04-03 Created By BaoXinjian

  5. 01 - 概述 VTK 6.0 迁移

    摘要 对vtk版本4和5的管道机制重新架架构的主要目的是:迁移数据对象和算法对象中的管道执行逻辑到一个新集合的类中,我们称这个集合类叫executives.分离数据和执行模型的代码后,可以双双简化修改 ...

  6. 001.MVC基本概述

    MVC的基本概念 一.NET平台下开发web应用程序的方案(方法) 方案A:ASP.NET webForm1.web窗体:臃肿(胖)性能低 优点:有很多的web控件可以使用,能够方便的和服务端交互(数 ...

  7. MVC思想概述

    一. 传统Model1和Model2 Model1:整个web应用几乎全部用JSP页面组成,JSP页面接收处理客户端请求,对请求处理后直接作出响应.用少量的javaBean来处理数据库链接,数据库访问 ...

  8. Redis数据库 01概述| 五大数据类型

    1.NoSQL数据库简介 解决应用服务器的CPU和内存压力:解决数据库服务的IO压力: ----->>> ① session存在缓存数据库(完全在内存里),速度快且数据结构简单: 打 ...

  9. MVC 设计模式概述

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/53292312) 1.MVC设计模式: 如图所示,MVC模式(Mod ...

  10. Hive 01 概述、安装配置

    概述 数据仓库:是一个面向主题的.集成的.不可更新的.随时间不变化的数据集合,它用于支持企业或组织的决策分析处理. 数据仓库的结构和建立过程: 数据源 数据存储及管理 ETL Extract 提取 T ...

随机推荐

  1. windows server 2008/2012 无法安装AD域解决方法记录

    安装活动目录之前需要一些准备工作和前提条件的. 有管理员的权限 至少有一个足够大的NTFS文件系统的分区或动态卷 需要DNS服务配合,因此需要安装DNS服务 最好使用dcpromo命令来进行安装 最终 ...

  2. php call_user_func和call_user_func_array

    首先要看这个页面关于callable类型:http://www.php.net/manual/zh/language.types.callable.php 自 PHP 5.4 起可用 callable ...

  3. C++之sort函数

    C++中的sort函数可以直接完美地取代Pas中十多行的快排代码,在这里,总结一下sort函数的用法: 首先是不加参数的情况: #include<cstdio> #include<a ...

  4. Django的TemplateResponse

    def my_render_callback(response): return response from django.template.response import TemplateRespo ...

  5. Android中库项目、jar包等的使用方法

    在软件开发过程中,程序代码的复用,是非常重要的概念.我们总是需要使用一些现有的模块.包.框架,或开发自己的模块.包.框架,来实现对程序代码的复用.比如在JavaWeb编程过程中,经常使用的Struts ...

  6. 信号量多-threaded同步Semaphore

    Semaphore它是JDK1.5一个实现后,外面有个办法同步.Semaphore能够保持其当前的线程接入号码.并提供了一个同步机制. 采用Semaphore时,可以用相同的对资源的访问进行控制的线程 ...

  7. IOS开发之格式化日期时间的使用 && 编程中常见问题

    今天在做一个有关时间的一些开发的时候,遇见了一写问题,反正来说既是很简单的问题,但毕竟用了我一些时间去调错误,遂记录之. 本来是想用 NSDateFormat 来转换一下服务器返回的时间,然后在客户端 ...

  8. js 模板引擎 jade使用语法

    Jade是一款高性能简洁易懂的模板引擎,Jade是Haml的Javascript实现,在服务端(NodeJS)及客户端均有支持. 功能 · 客户端支持 · 超强的可读性 · 灵活易用的缩进 · 块扩展 ...

  9. [Swust OJ 772]--Friend(并查集+map的运用)

    题目链接:http://acm.swust.edu.cn/problem/772/ Time limit(ms): 1000 Memory limit(kb): 65535    Descriptio ...

  10. EBS动态创建账户组合实现

    目的:使用程序动态创建账户组合.如果账户组合存在的话,返回存在的ID,不存在的话就动态创建账户组合并返回id. 实现步骤: 1. 得到账簿的CHART_OF_ACCOUNTS_ID 2. 得到账户弹性 ...