MVC框架(二)

上一篇文章http://blog.csdn.net/lnazj/article/details/78152899已经讲解了MVC 框架各层代表什么意思?那这次接着分享以下几点:

MVC框架与三层有什么区别?蕴含了什么思想?
老师经常会说思想通,万事通,现在接触的内容越来越多,有种触类旁通的感觉,归根到底他们的思想都是一样的,都是实现了模块化,解耦,复用。

相同点:
思想相同:MVC(Model-View-Controller)框架类似于我们的三层,三层是我们对整个系统进行划分实现解耦,而MVC是借用三层解耦的思想对我们的U层进行了划分,分为了Model层,View层和Controller层。

区别:
Controller:在Mvc中是用户交互逻辑层,相当于三层中的U层中的与后台交互那部分,而三层中没有controller 层。
View :界面层,用户显示系统的界面,是用户与系统交互的接口,是一些html语言,当用户操作界面的时候,会根据用户的操作找到相应的controller去指行,然后把结果返回。
Model:MVC 中的Model 与三层中的model是有区别的,三层中的Model 是实体类型,而MVC 框架中的model 层成为数据访问层和逻辑处理层。

为什么要使用MVC框架?
在没有MVC框架之前我们是怎么开发的,我们都曾经开发过新闻发布系统,使用的三层架构, 界面层就是U(web)层没有独立开, U层既包含界面显示的部分,也包含与后台交互整合的部分,所以加入我们想换一个界面,这时候还需要重新建项目,会写很多代码,不利于复用。如何就可以很好地复用了呢?那就是解耦,而mvc就很好第解决了这个问题.

而mvc中view 层负责界面显示,controller 负责用户逻辑处理,这样就很好地解耦合了,同一个controller可以使用多个view,加入我们开发的是PC 的项目,但是还想在开发手机版的,这时候只需要更改view设计界面就可以,其他的controller 和model 都不需要更改。

MVC框架执行过程?

Step 1: 首先获取控制器。
Step 2:依赖行为控制器创建Model对象,Model通过转换调用数据访问层。
Step 3:数据填充Model之后,传递到View 显示层,实现显示的目的。

这里写图片描述

代码执行顺序:以页面加载为例
首先执行自己的controller 里返回 view的方法GetView,跳转到MyView界面.

     //返回controller 对应的视图-李娜-2017年11月19日18:02:32
        public ActionResult GetView()
        {
            return View("MyView");
        }

Myview里是html 写的,就是要显示的静态的页面,同时会引用自己的js 文件

 <!--引用自己的js 文件-->
    <script src="~/JS/MyApplication.js"></script>

在页面加载的过程中会跳到js的document的ready方法执行,在窗体加载方法里通过url 配置了路径跳转,告诉该跳到哪个controller的哪个方法执行,这里就是要到MyApplicationController类里执行ShowAllApplication方法。

$(document).ready(function () {

    //给搜索按钮的click事件绑定search_click 方法
    $('#btn_Search').bind('click', search_click);

    $.ajax({

        //类型为get,是要从数据库获取数据
        type: "GET",

        //获取数据的地址,去执行对应的controller获取所有我的申请,MVC里的controller相当于三层中的U层
        url: "/MyApplication/ShowAllApplication",

        //返回的数据类型为json类型
        dataType: "json",

如下是MyApplicationController类的ShowAllApplication方法,会执行B层,D层访问数据库,然后把返回来的数据根据对应的Model转化成json格式

 #region+页面加载时根据申请人编号显示我所有的申请-李娜-2017年11月16日15:15:42      
        public JsonResult ShowAllApplication(string applicant)
        {
            applicant = "001";
            List<V_MyApplication> list = myApplicationBLL.ShowALLApplicationBll(applicant);
            return Json(list, JsonRequestBehavior.AllowGet);//把泛型转化成json 数据格式
        }    
        #endregion

如果成功就会返回js执行success 方法,把查询到的数据给data.然后填充datagrid表格返回给view ,这样展示给用户。

 success: function (data) {
            //定义数组变量,存放着datagrid各列的ID
            var data1 = []

            //循环向data1里添加数据
            for (var i = 0; i < data.length; i++) {
                data1.push({ "itemNo": data[i].ItemNo, "itemName": data[i].ItemName, "categoryName": data[i].CategoryName, "number": data[i].Number, "purpose": data[i].Purpose, "userName": data[i].UserName, "lendingDate": data[i].LendingDate, "returnDate": data[i].ReturnDate, "status": data[i].Status })
            }

            //在表格中加载数据,dg是datagrid 的ID
            $('#dg').datagrid("loadData", data1);
        }

总结:
学到最后,发现所有的东西都是想通的,就从刚开始接触的面向对象设计模式开始,设计模式基本都是都是围绕复用,可扩展,灵活,解耦这样的思维对23个模式展开来讲的,接着学习的三层也是解耦,分成了U,B和D层实现各个模块的独立,复用,然后呢?最近接触的MVC,Angular框架,其中MVC就是复用了三层的思想对U层进行了划分,分成了Model,view和Controller 层,其中任何一层的改变都不会去影响另一层,这样就可以很好地去复用,像Angular中的思想就是组件模块,每个组件封装了一定的功能,我们直接拿过来用就可以,这又是解耦,独立,复用和封装的思想,并且angular实现了前后端分离,这样前后端可以复用,并且可以并行开发,大大提高了效率。

就像上面的模块化思想,很像工厂车间一样,每个人只负责自己负责的那部分,对自己的那部分非常熟悉,这样使得生产效率大大提高了,并且当这个人离开之后,我只需要再找一个会这部分工作的人就可以,对其他的人没有影响,所以说生活就是学习,学习来源于生活,同时学东西不要太局限了,如果只是学习本专业的知识,学的再牛无疑也是井底之蛙,学习无处不在,拓宽视野。

同时也要以一个发展过程化的眼光看问题,所有的不是非0即1,以angular前端工程化为例,以过程化的思维来看前端,其实前端工程化的思想就是复用了软件工程的思想来管理前端的开发,在讲的过程中不能只是单独局限在它的工程化有多好,多牛,而是要想他是怎么发展过来的,为什么要有工程化?他好好在哪里,不好的话存在什么问题?好的地方遵循了什么思想?如果不好的话又违背了什么思想?本人以为最重要的是最后都要归结到思想上来。这样做,我想也是在培养自己的创新,创造能力,这样才能设计出自己想要的产品。

思想是一切的根源,但是思想呢,又都是相通的,大道至简,或许就是这个道理。学习任何内容都一样,真所谓没有什么难的,只是我们没有去学它罢了,如果去学的话一定可以学的很好。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 19
    评论
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诗琪小姐姐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值