首页 > 编程语言 >[ASP.NET MVC 小牛之路]01 - 理解MVC模式

[ASP.NET MVC 小牛之路]01 - 理解MVC模式

时间:2023-06-02 14:44:29浏览次数:51  
标签:ASP 01 模型 视图 领域 MVC NET


文章出处: https://www.cnblogs.com/willick/p/3195560.html

理解一般意义上的MVC模式

MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为以下三个基本部分:

  • 模型(Model):模型用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。“模型”有对数据直接访问的权力,例如对数据库的访问。“模型”不依赖“视图”和“控制器”,也就是说,模型不关心它会被如何显示或是如何被操作。
  • 视图(View):视图能够实现数据有目的的显示。在视图中一般没有程序上的逻辑。
  • 控制器(Controller) :控制器起到不同层面间的组织作用,用于控制应用程序的流程。它处理事件并作出响应。“事件”包括用户的行为和数据模型上的改变。

上面的定文来自维基百科。根据上面的定文和我个人的理解,我画了下面这样一张表示MVC各部分关系的图:

  

注意,不同的平台和不同的语言框架对MVC的定义各有不同,并没有一个明确的定义。但大体上,MVC模式中的每个部分是分工明确、界定清晰的。操作数据的逻辑只存在于模型中,呈现数据的逻辑只存在于视图中,处理用户的请求和输入只存在于控制器中。不管应用程序有多大、处于哪段生命周期,这种清晰的关注点分离(separation of concerns)的MVC模式让我们的应用程序更容易维护和扩展。

理解领域模型

领域模型(Domain Model) 是对领域内的概念类或现实世界中对象的可视化表示。又称概念模型、领域对象模型、业务对象模型。它专注于分析问题领域本身,发掘重要的业务领域概念,并建立业务领域概念之间的关系。 领域模型是描述业务用例实现的对象模型,它是对业务角色和业务实体之间应该如何联系和协作以执行业务的一种抽象。

对于MVC应用程序,领域模型是一个非常重要的部分。在某种行业内,我们根据现实世界的实体、相关的操作和规则来创建模型(Model)。对于C#程序来说,领域模型就是一组封装现实世界对象的C#类型(类、结构等);领域内对对象的一些操作(或者叫处理),则是定义在C#类型中的方法(Method);而领域内对对象操作的一些规则就是方法内部的逻辑处理,比如C#中的属性读写器的get和set方法对读写类成员的控制。举个例子:
比如银行这个领域,个人的“银行帐户”可以建成一个模型。每个账户都有“银行卡消费”这项操作,即银行账户模型下的一个方法。“不能透支消费”是对这个帐户使用银行卡的约束规则,这个规则就是定义在银行卡消费方法内部的逻辑处理。

上面说的虽然有点抽象,但还是很容易理解的。而我对领域模型的理解只能到这里了,朋友们好好体会吧。总之,在MVC应用程序中,我们要有这样一个概念:要通过Model操作数据,或添加一项操作,或给某项操作添加、改变一个规则,这些都是在改变应用程序的领域模型。

理解ASP.NET中的MVC

概括的讲ASP.NET MVC有如下特点:

  1. 通过把项目分成model view和controller,这种任务分离(亦称关注点分离),使得复杂项目更加容易维护,另外测试驱动组件使得应用程序也更加容易测试。
  2. 可扩展的简便的框架。mvc框架被设计用来更轻松的移植和定制功能。你可以加入自己的视图引擎,url重写策略,重载action方法等。mvc也支持Dependency Injection (DI) 和 Inversion of Control (IOC)。强大的url重写机制让你更方便的建立容易理解和可搜索的url。url可以不包含任何文件扩展名,并且可以重写url使其对搜索引擎更加友好。
  3. 对现有的asp.net程序的支持,可以使用asp.net现有的页面标记、用户控件、模板页、数据绑定等等。
  4. ……

在ASP.NET MVC中,控制器通常是继承System.Web.Mvc.Controller的类。控制器中类的每个公共方法被称为Action方法。ASP.NET路由系统内部根据请求的URL和路由配置调用对应的Action方法,完成领域模型的操作后,再选择一个视图呈现给客户端。下图显示了ASP.NET MVC中Controller、Model和View之间的关系:

另外,ASP.NET MVC框架可以使用任何被.NET支持的数据库、ORM框架和其他工具。

对于初学者,我觉得对ASP.NET MVC的概念了解到这就差不多了。如果想更好的理解ASP.NET中 MVC的概念建议访问MSDN文档
如果你是新手,为了帮助理解,建议你到网上找几个几个简单的Demo做做。

   

标签:ASP,01,模型,视图,领域,MVC,NET
From: https://www.cnblogs.com/JackyXu2018/p/17451712.html

相关文章

  • 2018-2019,盖个时间戳
    2019第一个工作日,连续第12年的个人小结,不为别人,只是写给自己。先回顾一下之前的小结:2007的写在msn的space上,可惜这个产品已经死了好几年了,也没留底;2008~2013的写在iamsujie.com上;2014年开始写在微信公众号里。它们的标题如下。2007总结 2008展望2008年小结,我想,我就从这里开始2010......
  • P1001 A+B Problem
    考虑只用位运算去解决。\(a+b\)可以表示成\((a\landb)+(a\veeb)\),即把共有的\(1\)和独有的\(1\)分开。因为\((a\landb)\in(a\veeb)\),所以可以将前者左移一位,后者异或上前者,和保持不变。这样又回到了第一步,递归计算即可,边界条件为\(a=0\)。其实就是在模拟二进制加......
  • [ROI 2018] Innophone 题解
    [ROI2018]Innophone看了半天网上仅有的一篇题解……才堪堪写出来不过在LOJ上看提交,全是KTT,看得我瑟瑟发抖(不会题意翻译在平面上有一些点,你需要在这个平面上任意确定一个点(不要求是给定的点),定义其贡献为横坐标\(\times\)其右侧的点\(+\)纵坐标\(\times\)其左上方的......
  • [SDOI2017]数字表格
    题意求如下表达式的值\[\prod_{i=1}^{n}\prod_{j=1}^{m}f_{gcd(i,j)}\pmod{10^9+7}\]其中,\(f_i\)为fibonacci数列的第\(i\)项,\(n,m\leqslant10^6\)Solution\[\prod_{i=1}^{n}\prod_{j=1}^{m}f_{gcd(i,j)}\]改变枚举顺序,优先枚举\(d=gcd(i,j)\),\[=\prod_{d=1}......
  • 0001.机器学习系统的类型
    根据训练期间接受的监督数量和监督类型,可以将机器学习系统分为以下四个主要类型:有监督学习、五监督学习、半监督学习和强化学习。一、有监督学习在有监督学习中,提供给算法的包含所需解决方案的训练集称为标签。有监督学习方法有:k-近邻算法;线性回归;逻辑回归;支持向量机(SVM);决策......
  • 01-Gradle简单安装、介绍、使用
    01-Gradle简单安装、介绍、使用简单环境配置:如果需要使用Gradle,可以简单到官网上进行查看教程Gradle官方教程重要:如果需要使用Gradle,那么至少需要准备Java开发环境JDK-8或者以上。简而言之,如果是MacOS,可以安装brew软件,从而进行安装安装指令:brewinstallgradle。如果......
  • 计算机毕业设计|外文文献翻译之MVC架构详细介绍
    作者主页:编程指南针作者简介:Java领域优质创作者 多年架构师设计经验、腾讯课堂常驻讲师主要内容:Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助收藏点赞不迷路 关注作者有好处文末获取源码 注:如需索要英文原文档,三连后请文末查看MVC架构驱动重构实现客户端网页......
  • Machine Learning 【note_01】
    Declaration(2023/06/02):Thisnoteisthefirstnoteofaseriesofmachinelearningnotes.Atpresent,themainlearningresourceisthe2022AndrewY.NgmachinelearningDeeplearning.aicourse,fromwhichmostoftheknowledgeandsomepicturesinthe......
  • https://blog.csdn.net/weixin_58018769/article/details/130380746
     :move="onMove" onMove(e){console.log(e);letmoveName=e.draggedContext.element.name//这个是当前拖拽的控件名//接下来判断该控件要不要拖进指定的容器if(moveName=='禁止拖拽进容器的控件名'&&e.to._prevClass=='要拖进的容器的class名......
  • 20230601
    日期2023-06-01连续总结第一天事项星盟Re入门视频1个,总结思维导图CTFshowRe入门题安装Ollydbg,解决问题......