zoukankan      html  css  js  c++  java
  • 为Linux重新开发MVC,有图有真相

    1.写在前面

          就连我们自己开始时也在问自己:我们为什么要开发一套MVC,微软的难道不可用用吗?

    一开始的理由很简单.为了更好地跨平台部署;在Linux部署过.NET的人们应该知道,

    部署起来是有点繁琐的.自己试试就知道了:

    文件名问题、版本问题、兼容问题................

    但当我们仔细思考后发现了有些东西势在必行.

    2.我们的原因

    1)我们需要更好的跨平台框架

          正如概述里提到的,微软的MVC不能够直接提供支持..从开发的角度来看你的开发环境需要重新配置一番,你的服务器运行环境同样需要

    繁琐的配置.而我们需要的效果很直接:一套代码无论是在IDE中还是在IIS或Linux Web服务器上都能无缝运行.

    简单来讲,代码搬过去搬过来都能很好调试、运行、无需繁琐的配置.

          而微软的MVC始终在为其Windows Server考虑.

    2)我们需要更优秀的MVC编程理念及测试环境.

    我们先看一段MVC的代码

    public ActionResult GetStudent(int id)
     {
                Student st = new Student();
                st.Email = "q@q.com";
                st.Name = "秦时明月" + DateTime.Now.ToShortDateString();
                st.Password = "pwd";
                st.PID = 23;
                st.Birth = DateTime.Now.AddYears(-10);
                st.Fa = new Father();
                st.Fa.Age = 90;
                st.Fa.Name = "Father1";
                st.Fa.Mother = new Mother() { Name = "mm", Age = 1002 };
                return View(st);
     }

    现在我们提出两个疑问:

    1. 如果上面的业务功能我需要在其他代码中使用怎么办?比如:我有一个查询功能就是这样的模式.----代码重用率

    2.如果我要对这段代码进行自动化测试怎么办?或许你有好方法----但这是一个问题.

    假如,MVC的Action 为以下代码,那么所有的问题就不是问题了.

    public Student GetStudent(int id)
            {
                Student st = new Student();
                st.Email = "q@q.com";
                st.Name = "秦时明月<>" + DateTime.Now.ToShortDateString();
                st.Password = "pwd";
                st.PID = 23;
                st.Birth = DateTime.Now.AddYears(-10);
                st.Fa = new Father();
                st.Fa.Age = 90;
                st.Fa.Name = "Father1";
                st.Fa.Mother = new Mother() { Name = "mm", Age = 1002 };
                return st;
            }

    以上仅仅是一个引子.还有很多其他类似问题,我们以后再讨论.

    3)我们要更好的Debug环境

    当然你说你可以把微软的MVC源代码拿进来做调试,

    但我也可以问你:你在一刻钟之内能够将其集成到你的项目中进行调试吗?

    3.项目截图

                <%=Html.TextBoxFor(m => m.Name) %><br />
                <%=Html.TextBoxFor(m => m.Password) %><br />
                <%=Html.TextBoxFor(m => m.PID) %><br />
                <%=Html.TextBoxFor(m => m.Birth) %><br />
                <%=Html.TextBoxFor(m => m.Fa.Name) %><br />
                <%=Html.TextBoxFor(m => m.Fa.Mother.Name) %><br />
                <%=Html.TextBoxFor(m => m.Fa.Mother.Age) %><br />
    

    4.配置过程.

    从dll包里面引用

    1.引用Moon.Web,(Moon.Orm,FluentValidation 可以不引用)

    2.配置web.config的page节点.

    <pages pageParserFilterType="Moon.Web.ViewTypeParserFilter, Moon.Web" 
                  pageBaseType="Moon.Web.MViewPage,Moon.Web"  enableViewState="false" enableViewStateMac="false"
                     autoEventWireup="false"
               >
            <namespaces>
              <add namespace="Moon.Web" />
            </namespaces>
          </pages>
    View Code

    3.配置handler

    1)若集成模式.(现在WINDOWS SERVER基本上都用集成模式) configuration节点下直接使用如下配置

    <system.webServer>
        <handlers>
          <add name="RequestHandler" path="*.htm" verb="*" type="Moon.Web.RequestHandler, Moon.Web" />
        </handlers>
      </system.webServer>

    2)若经典模式(老版本IIS,包括xsp4 mono)

    <configuration>
         <system.web> 下配置.

       <httpHandlers>
        <add   path="*.htm" verb="*" type="Moon.Web.RequestHandler, Moon.Web" />
        </httpHandlers>

    4.添加文件夹

    在项目根目录下添加

    Controllers文件夹(非必须)

    Views文件夹

    如上面项目结构图所示.

    5.创建Controller

    如下所示,继承BaseController即可.

    然后在global文件中注册路由

    6.创建视图

                                                                                                                             

  • 相关阅读:
    波段是金牢记六大诀窍
    zk kafka mariadb scala flink integration
    Oracle 体系结构详解
    图解 Database Buffer Cache 内部原理(二)
    SQL Server 字符集介绍及修改方法演示
    SQL Server 2012 备份与还原详解
    SQL Server 2012 查询数据库中所有表的名称和行数
    SQL Server 2012 查询数据库中表格主键信息
    SQL Server 2012 查询数据库中所有表的索引信息
    图解 Database Buffer Cache 内部原理(一)
  • 原文地址:https://www.cnblogs.com/humble/p/4807168.html
Copyright © 2011-2022 走看看