• 为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.创建视图

                                                                                                                             

  • 相关阅读:
    命名之法 —— 男名、女名、家族(古诗词与古典名著)
    findContours函数参数详解
    推理集 —— 特殊的时间
    推理集 —— 特殊的时间
    分蛋糕问题 —— 9 个烧饼分给 10 个人
    分蛋糕问题 —— 9 个烧饼分给 10 个人
    辩论之术
    辩论之术
    findContours 轮廓查找
    坚持是一种品行
  • 原文地址:https://www.cnblogs.com/humble/p/4807168.html
Copyright © 2020-2023  润新知