初识MVC

简介:         mvc,英文名叫Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。

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

       初次遇见你--MVC小编总是会把你和以前学习过的三层和设计模式弄混,再此,小编查阅相关资料,接着,小编就对这些相似的知识点进行简单对比:

       mvc  pk  三层

       三层架构界面层,业务逻辑层和数据访问层,很多人就通mvc里面的三个核心部件同三层架构等同起来,认为界面层等于View,业务逻辑层等于Controller,数据访问层等于Model,这是完全错误的,mvc设计模式解决的是页面代码,页面控制逻辑和数据耦合的问题,所以她首先属于界面层,比如mvc和structs都是界面层框架,mvc里面的controller是负责对界面进行控制的,比如,页面间跳转,显示逻辑等,三层架构里的业务逻辑层主要是对业务实体数据的加工,把加工后的数据传给页面显示,mvc里面的model只是数据实体,不具备增删改查的功能,她接收的数据是从业务逻辑层处理好传过来的数据,而三层架构里面的数据访问层是具有增删改查功能的,是直接对数据库操作的,为业务逻辑层提供数据支持,切忌mvc只是三层里面的界面层,不要混淆了哦。

        mvc pk 设计模式

        有很多小伙伴往往把框架模式和设计模式混淆,认为MVC是一种设计模式。实际上她们完全是不同的概念。
框架、设计模式这两个概念总容易被混淆,其实它们之间还是有区别的。框架通常是代码重用,而设计模式是设计重用,架构则介于两者之间,部分代码重用,部分设计重用,有时分析也可重用。在软件生产中有三种级别的重用:内部重用,即在同一应用中能公共使用的抽象块;代码重用,即将通用模块组合成库或工具集,以便在多个应用和领域都能使用;应用框架的重用,即为专用领域提供通用的或现成的基础结构,以获得最高级别的重用性。

       框架与设计模式虽然相似,但却有着根本的不同。设计模式是对在某种环境中反复出现的问题以及解决该问题的方案的描述,它比框架更抽象;框架可以用代码表示,也能直接执行或复用,而对模式而言只有实例才能用代码表示;设计模式是比框架更小的元素,一个框架中往往含有一个或多个设计模式,框架总是针对某一特定应用领域,但同一模式却可适用于各种应用。可以说,框架是软件,而设计模式是软件的知识。

        框架模式有哪些?
        MVC、MTV、MVP、CBD、ORM等等;
       框架有哪些?
       C++语言的QT、MFC、gtk,Java语言的SSH 、SSI,php语言的 smarty(MVC模式),python语言的django(MTV模式)等等
        设计模式有哪些?
        工厂模式、适配器模式、策略模式等等简而言之:框架是大智慧,用来对软件设计进行分工;设计模式是小技巧,对具体问题提出解决方案,以提高代码复用率,降低耦合度。介绍完了大家的的区别和联系之后,回到今天博文的主角mvc,接着小编就来做一个简单的入门例子。

        第一步:创建一个mvc的例子,如下图所示:

        

       第二步:选择Internet应用程序:

        

        接着,我们就开始编写代码,在model中新建一个Dog类,用于模拟数据,代码如下所示:

        

<span style="font-size:18px;"><span style="font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace mvcTest.Models
{
    public class Dog
    {
        public int ID { get; set;}
        public string Name{ get; set;}

        public override string ToString()
        {
            return "ID=" + this.ID + ",Name=" + this.Name;
        }
    }
}</span></span>
        第三步:在Controllers文件夹下新建一个控制器,用于从获取数据,添加控制器的方法,右击Controllers,添加控制器即可,代码如下所示:

        

<span style="font-size:18px;"><span style="font-size:18px;">using mvcTest.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace mvcTest.Controllers
{
    //控制器类(继承了Controller)
    public class HomeController : Controller
    {
       
        #region 初始化数据集合+void InitData()
        /// <summary>
        /// 初始化数据集合
        /// </summary>
        public List<Models.Dog> InitData()
        {
            List<Models.Dog> list = new List<Models.Dog>()
            {
                new Dog(){ID=1,Name="小样1~~"},
                new Dog(){ID=2,Name="小样2~~"},
                new Dog(){ID=3,Name="小样3~~"},
                new Dog(){ID=4,Name="小样4~~"}
            };

        }
        
        #endregion


       //Action方法(可是看成是mvc设计模式的 Model)
       public ActionResult Index()
        {
            System.Text.StringBuilder sbHtml = new System.Text.StringBuilder(4000);
           //处理当前业务(比如读取数据库,判断等)
            //创建一个数据集合(伪数据),获取数据
            List<Models.Dog> list = InitData();
            //遍历集合,生成html代码,存入sbHtml
            list.ForEach(d =>
            {
                sbHtml.AppendLine("<div>" + d.ToString() + "</div>");
            });
           //使用ViewBag传输数据给同名 Index.cshtml视图
           //ViewBag是一个dynamic类型集合,可以动态添加任意类型的任意名称的属性和值  
           ViewBag.HtmlStr = sbHtml.ToString();
            return View();
        }

    }
}
</span></span>
        第四步:添加视图,代码如下所示:

        

<span style="font-size:18px;"><span style="font-size:18px;">@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    <!--相当于把Action方法中保存的内容,放在此处输出!
        默认Razor视图会将从后台输出的字符串里保护的《转义成&1t;
        为了不转义,使用Row方法,来输出html标签源码!-->
    @Html.Raw(ViewBag.HtmlStr)
</body>
</html>
</span></span>
        至此,一个简单的mvc的例子就完成了。

       小编寄语:该博文,小编简单的介绍了一下mvc的基础知识,以及使用mvc敲了一个简单的例子,并且对mvc和三层,以及mvc和以前学习过的设计模式进行了简单的对比,通过对mvc的学习,小编对这块知识的理解又加深了一点点,档案管理项目,未完,待续......   

目录
相关文章
|
搜索推荐 Java 数据库
基于SpringBoot校园二手书交易管理系统
基于SpringBoot校园二手书交易管理系统
|
关系型数据库 MySQL Java
【面试题精讲】MySQL-长连接和短连接
【面试题精讲】MySQL-长连接和短连接
|
安全 大数据 API
elasticsearch|大数据|elasticsearch的api部分实战操作以及用户和密码的管理
elasticsearch|大数据|elasticsearch的api部分实战操作以及用户和密码的管理
654 0
|
机器学习/深度学习 数据采集 人工智能
人工智能与机器学习的前景和挑战
人工智能和机器学习的前景是令人振奋的,它们在许多领域带来了创新和变革。然而,随着前景的广阔,也伴随着一些挑战,如数据质量、隐私和伦理问题。通过持续的研究和努力,我们有望克服这些挑战,实现人工智能和机器学习的更大潜力。从自动驾驶汽车到医疗诊断,从自然语言处理到工业自动化,人工智能和机器学习将继续塑造我们的世界。
1054 1
人工智能与机器学习的前景和挑战
|
前端开发 UED 开发者
【前端秘籍】掌握 display: none 与 visibility: hidden 的奥秘,让你的网页设计更上一层楼!
【8月更文挑战第23天】在Web前端开发中,常需控制元素的可见性。本文详细对比了两种主流CSS隐藏方法:`display: none`和`visibility: hidden`。`display: none`彻底移除元素在页面布局中的位置,适用于无需保留空间的隐藏场景;而`visibility: hidden`仅使元素视觉上消失,仍保留其布局位置,适用于需要动画效果或保留布局结构的情况。通过具体示例展示了两种方法的实际应用,帮助开发者根据项目需求选择最合适的方式,提升用户体验。
425 0
|
敏捷开发 监控 架构师
【领域驱动设计专题】一文带领你透视DDD领域驱动模型的本质和设计原理分析指南(构建领域知识)
【领域驱动设计专题】一文带领你透视DDD领域驱动模型的本质和设计原理分析指南(构建领域知识)
401 0
|
C++ 容器
常见的内存分配错误
【10月更文挑战第11天】
365 2
|
图形学
【推荐100个unity插件之9】分享几个完全免费的2D角色动画生成器(推荐收藏)
【推荐100个unity插件之9】分享几个完全免费的2D角色动画生成器(推荐收藏)
1145 0
|
关系型数据库 MySQL 开发工具
NextCloud自建家用网盘
在阿里云ECS(2核2G,SSD40G,3M带宽)上,安装Ubuntu 22.04,然后配置FRPs,设置权限,开放端口。本地服务器拉取 `NextCloud` Docker镜像,并通过docker-compose进行容器部署,容器启动成功,通过FRPc链接到云主机,到这里就已经实现本地网盘服务可以通过公网访问。
639 0
WordArt Designer:基于用户驱动与大语言模型的艺术字生成
本文介绍了一个基于用户驱动,依赖于大型语言模型(LLMs)的艺术字生成框架WordArt Designer。