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

 

 

                                                                                                                         

 

posted @ 2015-09-14 15:11  迅捷网络[来送福利]  阅读(2158)  评论(10编辑  收藏  举报