深入浅出MVC

简介: 深入浅出MVC

MVC简介

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

示意图

Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。

View(视图)是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。

Controller(控制器)是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

MVC框架和三层架构

刚开始学习MVC的时候感觉MVC框架和三层架构是非常类似的,不明白两者之间有什么区别

三层架构中,三层分别是UI层表示用户界面,BLL层表示业务逻辑,DAL层表示数据访问;

而MVC中,View层是界面,Model层是业务逻辑,Controller层用来调度View层和Model层,将用户界面和业务逻辑合理的组织在一起,起粘合剂的效果。

从上面可以看出来MVC和三层其实还是有很大的区别的:

三层重视面向接口编程和各层之间的解耦和可替换性。

MVC要实现的是将软件用户界面和业务逻辑分离以使代码可扩展性、可复用性、可维护性、灵活性加强。

MVC中,View会提交数据给Model进行处理以实现具体行为,不会直接传给Model,而是通过Controller来转发。

三层架构中不存在Controller的概念,三层是一种非常明确的上下层关系,而MVC中的三者是一种合作协同的关系。

区分不开三层和MVC就很容易把业务逻辑放到Controller中,但实际上,Controller中的内容越少越好,Controller 的存在就是为了提高灵活性,不应该为其增加新的职责。

MVC是不是设计模式?

GoF (Gang of Four,四人组, 《Design Patterns: Elements of Reusable Object-OrientedSoftware》/《设计模式》一书的作者:Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides)并没有把MVC提及为一种设计模式,而是把它当做“一组用于构建用户界面的类集合”。在他们看来,它其实是其它三个经典的设计模式的演变:观察者模式(Observer)(Pub/Sub), 策略模式(Strategy)和组合模式(Composite)。根据MVC在框架中的实现不同可能还会用到工厂模式(Factory)和装饰器(Decorator)模式。

从上面的资料来看,MVC糅合了三种设计模式甚至更多,却不是设计模式。MVC是设计模式的一种升华,它用到了设计模式的很多思想,

MVC具体实例

小例子-欢迎光临

第一步:新建项目,框架要选择 Franmework4.5以上,不然没有MVC选项。

第二步:选择空的模板,选择MVC

第三步:在解决方案中找到Controller文件夹,右键添加-添加控制器,命名为:HomeController

第四步:修改默认默认代码为:

运行效果如下:

将代码恢复默认状态,然后右击Index,添加视图

点击添加

将视图中的代码修改为,运行之后发现和之前的界面一致

接下来继续完善HomeController.cs

然后打开Index.cshtml,更改代码如下:

<body>
    <div>
        <h1>欢迎光临!</h1>
        <p>@ViewBag.SayHi</p>
        @Html.ActionLink("注册会员","REG")
    </div>
</body>


目录
相关文章
|
存储 编解码 缓存
Qt开发技术:Qt绘图系统(一)绘图系统介绍
Qt开发技术:Qt绘图系统(一)绘图系统介绍
Qt开发技术:Qt绘图系统(一)绘图系统介绍
|
2天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
265 116
|
17天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
11天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
655 220
|
5天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
325 32
Meta SAM3开源:让图像分割,听懂你的话
|
9天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1512 157