在深入到 ASP.NET MVC 框架的细节之间,最好熟悉 MVC 的设计模式及其背后的思想。良好地理解 MVC 背后的内容,有助于在阅读本书的过程中将该框架的特性放到相关的情境之中。

3.2 理解 MVC 模式

    从高级术语上说,MVC 模式意味着一个 MVC 应用程序将被分离成至少3个部分

    · 模型(Model):含有或表现用户进行操作的数据

        模型可以是简单的视图模型:它们只表现视图与控制器之间传递的数据;(可以在Web项目的Models文件夹中创建)

        也可以是域模型:它包含业务领域的数据,以及处理这些数据的操作、转换和规则。(可以在类库项目中创建Entity文件夹并在里面创建域模型)

    · 视图(View):用于将模型的某些部分渲染成用户界面

    · 控制器(Controller):处理传入的请求 — 执行模型上的操作,并选择渲染给用户的视图

    模型是对应用程序工作的定义。
    模型也由不是其职责的内容来定义:
      模型不涉及 UI 渲染或请求处理——那些是视图和控制器的职责。(不要将视图和控制器的职责放到模型中进行定义,这些不是模型的
    职责)

    视图含有将模型元素显示给用户的逻辑,仅此而已。(它们不直接感知模型,也不以任何方式与模型直接通信)

    控制器是视图与模型之间的桥梁——请求来自客户端,并由控制器对其进行服务,进而选择一个相应的视图向用户进行显示,并在必要时
  执行模型上的相应操作。

    MVC 架构的每一个部分都是定义良好和自包含的,这称为关注分离

        模型中操作数据的逻辑仅包含在模型中,

        显示数据的逻辑仅包含在视图中,

        而处理用户请求和用户输入的代码仅包含在控制器中。

    利用各部分之间清晰的分离,无论应用程序有多大,在其整个生命周期中都会更易于维护和扩充。

3.2.1 理解域模型

    MVC 应用程序最重要的部分是域模型(而不是只表现视图与控制器之间传递的数据的视图模型)。—— 对于应用程序必须支持的业务或活动中存在的现实实体、操作以及规则等,可以通过对它们进行标识的方法创建模型,这种模型被称为域模型。

    为了实现 MVC 框架的这一目的,域模型往往是一组 C# 类型(类、结构等),统称为域类型。

    域中的操作由域类型中定义的方法来实现,而域规则表示成这些方法中的逻辑。或者通过运用 C# 的注解属性来实现。

    当创建一个域类型的实例来表现特定的数据片段时,便创建了一个域对象。

    域模型通常是持久化的,且一直处于活动状态;其实现有许多不同方式,但关系型数据库是最通常的选择。

3.2.2 MVC 的 ASP.NET 实现

    在 MVC(ASP.NET)中 ,控制器是 C# 类,其中每一个 public 方法都称为是一个动作方法,这种动作方法通过 ASP.NET 的路由系统与一个可配置的 URL 相关联。

    当一个请求被发送给与一个动作方法相关联的 URL 时,便会执行控制器类中的语句,以进行域模型上的一些操作,然后选择一个视图显示给客户端。

    ASP.NET MVC 框架使用试图引擎处理视图,以便为浏览器生成响应。

    提示:visual studio 提供了对 Razor 的智能感应支持,十分便于对控制器提供的视图数据进行注入和响应。

    ASP.NET MVC 对域模型的实现没有任何约束,可以用常规的 C# 对象创建模型,并可以用 .NET 支持的任何数据库,对象关系映射(ORM)框架,或其他数据工具来实现持久化。

MVC 模式——第3章的更多相关文章

  1. Pro ASP.NET MVC –第三章 MVC模式

    在第七章,我们将创建一个更复杂的ASP.NET MVC示例,但在那之前,我们会深入ASP.NET MVC框架的细节:我们希望你能熟悉MVC设计模式,并且考虑为什么这样设计.在本章,我们将讨论下列内容 ...

  2. 第十一章 Servlet MVC模式

    内包含案例,基于jsp+servlet的:MVC模式计算器:MVC模式登陆 第十一章 Servlet MVC模式 模型-视图-控制器(model-view-controller),简称MVC.MVC是 ...

  3. 二十八、带给我们一种新的编码思路——EFW框架CS系统开发中的MVC模式探讨

    回<[开源]EFW框架系列文章索引>        EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0 EFW框架实例源代码下载:http://p ...

  4. 二十七、EFW框架BS系统开发中的MVC模式探讨

    回<[开源]EFW框架系列文章索引>        EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0 EFW框架实例源代码下载:http://p ...

  5. 前端之Android入门(3):MVC模式(上)

    很多Android的入门书籍,在前面介绍完布局后就会逐个介绍组件,然后开始编写组件使用的例子.每每到此时小伙伴们都可能会有些疑问:是否应该先啃完一本<Java编程思想>学点 Java 知识 ...

  6. 基于 Dojo toolkit 实现 web2.0 的 MVC 模式

    前言 MVC 模式是设计模式中的经典模式,它可以有效的分离数据层,展示层,和业务逻辑层.Web2.0 技术由于其良好的用户体验被广泛应用于 WEB 应用的展示层.但是在传统的 web 开发中,展示层的 ...

  7. 卡卡游戏引擎之MVC模式下的事件处理

    前言 在前一篇文章 卡卡游戏引擎快速入门中提到了卡卡游戏引擎采用mvc的开发模式,这里相信介绍一下引擎在mvc模式下是如何做到低耦合的事件处理的. 在卡卡编辑器中选择一个节点,然后在左侧工具栏中切换到 ...

  8. Android入门:MVC模式(中)

    MVC 模式的最基本概念是分层设计,把我们的代码基于 View(视图).Model(模型).Controller(控制器)进行分类封装,这样做的目的是为了清晰结构,使代码更易维护和扩展. 在上一篇文章 ...

  9. Android:MVC模式(下)

    在上一篇文章中,我们将 View 类单独出来并完成了设计和编写.这次我们将完成 Model 类,并通过 Controller 将两者连接起来,完成这个计算器程序. 模型(Model)就是程序中封装了数 ...

随机推荐

  1. 含有虚函数的类sizeof大小

    #include <iostream> using namespace std; class Base1{ virtual void fun1(){} virtual void fun11 ...

  2. Antlr4 入门

    一.ANTRL 是什么 ANTLR 是用JAVA写的语言识别工具,它用来声明语言的语法,简称为“元语言”(meta-language). ANTLR 语法识别一般分为二个阶段: 1.词法分析阶段 (l ...

  3. 20145307陈俊达《网络对抗》Exp9 Web安全基础实践

    20145307陈俊达<网络对抗>Exp9 Web安全基础实践 基础问题回答 1.SQL注入攻击原理,如何防御? SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求 ...

  4. JAVA I/O(三)内存映射文件

    <Java编程思想>中对内存映射文件有详细的介绍,此处仅做简单记录和总结.内存映射文件允许创建和修改因为太大而不能放入内存的文件. 1. 内存映射文件简单实例 import java.io ...

  5. 使用fragment添加底部导航栏

    切记:fragment一定要放在framlayout中,不然不会被替换完全(就是切换之后原来的fagment可能还会存在) main.xml <LinearLayout xmlns:androi ...

  6. Python3基础 str for 输出字符串中的每个字符

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  7. ubuntu下交叉编译mono

    环境:ubuntu16.04 wget download.mono-project.com/sources/mono/mono-4.8.1.0.tar.bz2 配置: CC=arm-linux-you ...

  8. 解决gvim中php函数提示php_funclist.dict无法生效的问题

    在Windows中, 当打开php文件时, 提示 dicvim(setlocal) unknown option: Files\Vim\vimfiles\dict\php_funclist.dict ...

  9. P4303 [AHOI2006]基因匹配 未完成

    题目 luogu 暴力60pts部分 显然如果没有出现次数==5的条件 显然是\(N_{2}\)的求lcs的模板 但是加点条件就完全不同了 思路 这个题短小精悍,不想数据结构那么傻逼无脑 我们考虑一下 ...

  10. attr返回被选元素的属性值

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...