浅谈MVC架构—你到底有什么本事

一、什么是MVC

1、概念

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

小编点睛:MVC就是类似三层的一种架构,主要还是采用封装(分层)的思想,来降低耦合度,从而使我们的系统更加的灵活,扩展性更好。

2、内容

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

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

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

小编点睛:

3、优点

(1)首先,最重要的一点是多个视图能共享一个模型。同一个模型可以被不同的视图重用,大大提高了代码的可重用性。

(2)由于MVC的三个模块相互独立,改变其中一个不会影响其他两个,所以依据这种设计思想能构造良好的松耦合的构件。

(3)此外,控制器提高了应用程序的灵活性和可配置性。控制器可以用来联接不同的模型和视图去完成用户的需求,这样控制器可以为构造应用程序提供强有力的手段。

4、缺点

(1)增加了系统结构和实现的复杂性。

对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。

  (2)视图与控制器间的过于紧密的连接。

视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。

  (3)视图对模型数据的低效率访问。

依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。

  (4) 目前,一般高级的界面工具或构造器不支持MVC架构。

改造这些工具以适应MVC需要和建立分离的部件的代价是很高的,从而造成使用MVC的困难

小编点睛:根据MVC的优缺点,我们知道,每个东西都有自己适用的范围。

对于开发存在大量用户界面,并且业务逻辑复杂的大型应用程序,MVC将会使你的软件在健壮性、代码重用和结构方面上一个新的台阶。尽管在最初构建MVC框架时会花费一定的工作量,但从长远角度看,它会大大提高后期软件开发的效率。

所以我们在具体适用时,要综合考虑其适用范围,

二、工作原理

1、web工作原理图

小编点睛:这张图描述的是webform的处理方式,它通过url请求服务器,访问index_aspx类的Page_Load()方法,然后根据其逻辑结构返回结果

小编点睛:这张图描述的是MVC的处理方式,两者明显不同,首先要访问的url地址就不一样,它表示news对象的index方法,所以首先根据路由配置访问该方法,然后根据业务逻辑得出结果,最后调用index.cshtml视图来显示结果

2、内部工作原理图

小编点睛:上边这张图是MVC的处理过程:首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理。然后模型根据用户请求进行相应的业务逻辑处理,并返回数据。最后控制器调用相应的视图格式化模型返回的数据,并通过视图呈现给用户。

3、小例子

(1)先在model层写一个Dog实体类

    public class Dog
    {
        public int ID { get; set; }
        public string Name { get; set; }

        public override string ToString()
        {
            return "ID=" + this.ID +",Name=" + this.Name ;
        }
    }

(2)先在controller层写相应的代码

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

        #endregion

        // GET: /Home/
        /// <summary>
        /// Action方法(可堪称MVC设计模式的Model
        /// </summary>
        /// <returns></returns>
        public ActionResult Index()
        {
            System.Text.StringBuilder sbHtml = new System.Text.StringBuilder(4000);
            //2.1处理当前业务(比如读取数据库。判断等)
            //2.1.1创建一个数据集合(伪数据,并获得数据
            List<Models.Dog> list = IntData();
            //2.1.2遍历集合,生成HTNL代码,存入builder
            list.ForEach (d => {
                sbHtml.Append("<div>" + d.ToString() + "</div>");

            });
            //2.2使用viewBag传输数据给同名Index.cshtml 视图
            //viewBag是一个dynamic类型集合,可以动态添加任意类型的任意名称的属性和值
            ViewBag.HtmlStr = sbHtml.ToString();

            return View();
        }
    }

(3)最后在view层显示数据

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content ="width=device-width" />
    <title>Index</title>
</head>
<body>
    <!-- 相当于把Action中的内容,存放在此处 输出!-->
    @Html.Raw(ViewBag.HtmlStr)
</body>
</html>

(4)运行效果图

三、框架VS设计模式

1、框架通常是代码重用,而设计模式是设计重用,架构则介于两者之间,部分代码重用,部分设计重用,有时分析也可重用。

在软件生产中有三种级别的重用:内部重用,即在同一应用中能公共使用的抽象块;代码重用,即将通用模块组合成库或工具集,以便在多个应用和领域都能使用;应用框架的重用,即为专用领域提供通用的或现成的基础结构,以获得最高级别的重用性。

2、设计模式是对在某种环境中反复出现的问题以及解决该问题的方案的描述,它比框架更抽象。框架可以用代码表示,也能直接执行或复用,而对模式而言只有实例才能用代码表示。

设计模式是比框架更小的元素。一个框架中往往含有一个或多个设计模式,框架总是针对某一特定应用领域,但同一模式却可适用于各种应用。

可以说,框架是软件,而设计模式是软件的知识。

3、简而言之:框架是大智慧,用来对软件设计进行分工;设计模式是小技巧,对具体问题提出解决方案,以提高代码复用率,降低耦合度。

小编总结:通过MVC的学习,我们要知道它是用来分割页面和数据库访问的框架,降低了两者的耦合度,同时通过Controller的控制,也使系统更加的灵活,使我们的代码更健壮,复用性更强,但是凡事都有他适用的范围,我们不能觉得它好,就不敢三七二十一的瞎用,有时可能会适得其反,因此MVC的学习还需要我们以后慢慢探讨。

时间: 2024-12-24 17:15:25

浅谈MVC架构—你到底有什么本事的相关文章

浅谈MVC、MVP、MVVM架构模式的区别和联系

浅谈MVC.MVP.MVVM架构模式的区别和联系 学习了:http://www.cnblogs.com/guwei4037/p/5591183.html http://blog.csdn.net/ttf1993/article/details/49405329 MVC: Model->View->Controller->Model MVP: View <--> Presenter <--> Model MVVM: View (ViewController)<

浅谈三层架构(2)

感受: 对于三层的学习,自己刚开始的感觉真的是一头雾水啊,当时真的出现了很烦躁的感觉,我想这种感觉的出现真的是很可怕的,就这样耽误了两天,在网上也搜寻者自己想要的资料,昨天四姐也好心给调试了一番,顿时把自己的大脑打通了,其实问题难不难,就在于能不能打开思路了! VB.NET的三层实现: 上篇文章主要是对于三层有了一个表面的理解,下面针对机房收费登陆界面来进行一下简单的理解: UI层主要就是表面的构建,多以需要使用windows窗体来完成,而其他BLL和DAL则不需要,之间建立一个类库则可以完成自

浅谈MVC

浅谈MVC What is MVC? MVC与模板概念的理解:MVC(Model View Controller)模型-视图-控制器 MVC本来是存在于Deskt op程序中的,M是指数据模型,V是指用户界面,C则是控制器.使用MVC 的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式.比如一批统计数据你可以分别用柱状图.饼图来表示.C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新. 模型-视图-控制器(MVC)是Xerox PARC在八十年代为编程语言Small

2014-07-29 浅谈MVC框架中Razor与ASPX视图引擎

今天是在吾索实习的第15天.随着准备工作的完善,我们小组将逐步开始手机端BBS的开发,而且我们将计划使用MVC框架进行该系统的开发.虽然我们对MVC框架并不是非常熟悉,或许这会降低我们开发该系统的效率,但是我们可以通过边学边做的方式来实现其开发的.这不仅便于我们日后对系统的管理与维护,而且还给我们带来一个学习的动力与实践的地方. 但我们在创建一个基于MVC框架的项目时,就遇到一些问题了.那就是MVC的视图引擎是有两种的,一种是Razor,会以cshtml后缀的文件作为视图文件:另一种是ASPX,

浅谈“三层架构”

今天我们来谈谈三层和传说中的"七层". 三层:(先看图)             首先,我觉得学习三层并不太难,体现在三方面:认识不难.理解不难.它所展现的内容不难. "认识三层",网上随便一搜"软件的三层架构"云云,各种文章眼花缭乱.简单说三层就是指"表现层UI.业务逻辑层BLL和数据访问层DAL".表现层主要处理用户与界面的关系,业务逻辑层当然是主要处理业务逻辑,数据访问层就是处理有关数据库的系列操作,比如增删改查等. 其

浅谈三层架构(1)

这周单位要做一个人脸美化的项目,查资料遇到这位大牛的博客,地址如下:点击打开链接 我的代码也是在他的基础上进行修改的,但是他对图像的RGB三个通道平等调节,为了适应我的需求,我改成了针对三个通道分别调节.废话不多说,开始上源码 void ImageAdjust(Mat& src, Mat& dst, vector<double> low_in, vector<double> high_in, vector<double> low_out, vector&

浅谈 MVC 和 MTV

浅谈 MVC 和 MTV 一.MVC M:model,模型,就是数据模型,负责数据的存取: V:view,视图,负责页面的展示逻辑: C:controller,控制器,负责业务逻辑的处理: 二.MTV M:model,模型,就是数据模型,负责数据的存取: T:template,模板,负责页面的展示逻辑: V:view function,视图函数,负责业务逻辑的处理: 注:核心目的就是为了解耦,提高开发效率 欢迎关注小婷儿的博客: csdn:https://blog.csdn.net/u01098

浅谈网站架构演变

浅谈网站架构 作为一个从事后台开发已经2年的程序员来讲,大部分时间都忙于业务逻辑分析,往往忽略了业务之上的架构层面的设计. 本文作为网站架构知识的补充,不仅开拓了眼界,也对以后的程序设计益处多多.下面我们就一起来看看网站架构的演变历史. 网站架构的演变大致分为如下几个阶段: 1 初始阶段的网站架构 网站在最初开始时没有太多人访问,用一台服务器就完全可以胜任,此时的网站架构如下图所示. 应用程序,文件存储,数据库所有的资源都在一台服务器上.也就是经典的LAMP架构模型(Linux操作系统+部署在A

iOS开发项目架构浅谈:MVC与MVVM

MVC MVC,Model-View-Controller,我们从这个古老而经典的设计模式入手.采用 MVC 这个架构的最大的优点在于其概念简单,易于理解,几乎任何一个程序员都会有所了解,几乎每一所计算机院校都教过相关的知识.而在 iOS 客户端开发中,MVC 作为官方推荐的主流架构,不但 SDK 已经为我们实现好了 UIView.UIViewController 等相关的组件,更是有大量的文档和范例供我们参考学习,可以说是一种非常通用而成熟的架构设计.但 MVC 也有他的坏处.由于 MVC 的