為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 = "[email protected]"; 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 = "[email protected]"; 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.建立檢視