zoukankan      html  css  js  c++  java
  • MVC in WinForm

    最近在利用C# WinForm进行项目编码的时候发现,如果不恰当的使用Partial关键字或者是User Control,会导致逻辑代码和UI代码耦合度过高,往往会造成一个页面下面会有将近2000行代码……这,当然不是我所要看到的,我急需要一种模式能够将代码分散,并且最好做到逻辑和UI的分离。找来找去,发现MVC模式最好用,就用这个吧。

    当然,拿来用,肯定得明白它的实现方式,对于MVC这种模式,我也已经不是第一次接触了,就来简单的说点吧。

    MVC基本概念

    MVC,指的是Model View Controller,其核心是利用Controller来策动Model和View,简而言之,Controller就是生成Model和View的。请看下面的图示:

            

    这里我就来说下创建步骤:

    首先,Controller中需要有待操作的View和与之对应的Model,然后主要进行逻辑代码的编写。

    其次,View中需要有之对应的Controller的实例,这样才能方便调用Controller中的逻辑方法。

    最后就是启动的时候,最好是Controller First,而不是View First.

    需要注意的是,在MVC中,我们倾向于在Model类中使用INtofifyPropertyChanged接口;我们倾向于利用DataBindings来绑定数据。

    MVC具体使用实例

    下面就以一个刚刚编写的字模制作小软件来说明:

    在Controller中,我们需要指明需要操作的View和Model:

    View Code

    指明之后,剩下的就是操作逻辑了:

    View Code

    在Model中,倾向于利用INotifyPropertyChanged接口实现属性改变后通知到绑定

    View Code

    在View中,需要实例化Controller,然后调用Controller代码逻辑即可,所有的操作基本都和UI交互有关,大大降低了代码的耦合度:

    View Code

    最后说明下启动,由于是Controller是策动者,所以应当是ControllerFirst:

    View Code

     实例运行的结果

    然后把生成好的字符拷贝到VisualStudio中, 在VisualStudio中的显示如下:

    源码下载

    最后么当然是提供源码下载

     
    分类: DotNet Weapons

    asp.net MVC 的处理流程

    asp.net MVC 分为主要的Controller 、Action、以及Views

    下面来分析Asp.net MVC的处理流程:

    Controller 负责将获取Model数据并将Model传递个View对象,通知View对象显示。

    处理流程:

    1.用户发起请求---》UrlRouting获取请求—》MvcRouteHandler.GetHttpHandler()—>MvcHandler.ProcessRequest()

    2.UrlRouting获取浏览器发起的请求

    将RoutData与HttpContext合并成为RequestContext传递到IRoutHandler接口,IRoutHandler接口的实现类MvcRouteHandler接口到RequestContext参数,返回一个MvcHandler对象,并且为这个对象赋值RequestContext

    3.MvcHandler对象

    根据RequestContext参数解析出RouteData以及HttpContext,根据RouteData来查找出Controller以及对象的Action及其Parameters

    4.MvcHandler .ProcessRequest()方法的处理流程

    MvcHandler对象根据工厂方法获取到具体的Controller---->Controller.Execute()--->释放Controller对象

    这其中最主要的是MvcHandler对象根据传入的RequestContext参数来获取到具体的Controller,并执行其Execute()方法

    5.Controller.Execute()方法处理流程   查找Action

    获取Action--->调用ActionResult(Abstract方法)的ActionResult.ExecuteResult()方法

    6.ActionResult.ExecuteResult()方法

    获取到IView对象,--》根据Iview对象的页面路径获取到具体的Page,--->调用IView.RenderView()方法显示页面

    IView对象中存储的是页面的路径地址,最终通过页面引擎(View Engine)使用该路径生成具体的页面类,ViewPage(System.Web.Mvc.ViewPage)是实现了IView接口的对象。

    7,最终页面就可以正确的显示。

    ViewPage.RenderPartialView()   显示.ascx文件或者是ViewPage.RenderView() 显示.aspx文件。

    现在MVC  3中使用的是Razor视图引擎,和WebFormViewEngine一样的处理流程

    下面附上Pro Asp.net MVC 的作者的一副图

    c#学习中,我们一起来学习
    分类: Asp.Net MVC 3
    标签: mvc
  • 相关阅读:
    武汉长途汽车票自动查询软件皱形(纯属练手)
    用gSOAP开发Web Service程序
    窗口的子类化与超类化
    Thunk技术
    Nokia 牵手 Windows Phone 7?
    数据库自动打包压缩工具,asp.net + ATL完美组合
    诺基亚宣布与微软达成战略合作
    DataBinder.Eval总结
    人际关系的55个绝招看完又发现,其实看不完
    .NET 中的对象序列化
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2775809.html
Copyright © 2011-2022 走看看