為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.創建視圖

 

 

                                                                                                                         

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM