分享一實戰性開源MVC框架


一、引子  

    開源地址

  https://github.com/564064202/Moon.Mvc 歡迎加入開發

      .NET Core微軟還在發力,但作為商用還有一段距離,很多開發庫尚不能用於.NET Core,因此我們還沒有看到一個大型的使用案例,

這時大家或許想到Mono部署ASP.NET MVC,但部署過的人必然知道:這不是一個容易的工作,需要各種工作,不太容易地完成這項工作.

.NET Core作為微軟的新星,但還不夠成熟強大,在其發出耀眼光輝之前,我們分享一實戰性強的開源MVC框架:

Moon.Mvc,便捷易用的跨平台Mvc框架,比微軟的Mvc 更加短小精悍.

  Moon.Mvc是一套從ASP.NET底層(HttpHandler、HttpModule)着手開發的一套MVC框架.其中涉及模板引擎、Model自動化驗證機制、路由注冊、面向方面編程、客戶端緩存等諸多功能.較微軟發布的MVC而言,顯得更加精簡易用,而且可以無縫集成於其他現有.NET Web系統。

二、說說微軟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代碼是這樣的(類似於Web Api),豈不一箭雙雕解決上述兩點疑問.  

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.調試MVC源代碼的便捷性

當然你說你可以把微軟的MVC源代碼拿進來做調試,但我也可以問你:你在十五鍾之內能夠將其集成到你的項目中進行調試嗎?

      4.MVC的跨平台部署繁瑣

開篇就講到這個問題,祝福那些折騰的朋友:生命在於折騰.

三、框架的特色

  正如上文提到的內容,本框架開源解決這些問題,而且可以無縫集成到現有系統之中,作為類似於WebApi的使用方式來使用(免去模板引擎功能)

,例如你可以在WebForm項目中直接使用.最終的效果很明朗:一套代碼無論是在IDE中還是在IIS或Linux Web服務器上都能無縫運行.

簡單來講,代碼無論在哪個平台都能很好調試、運行、無需繁瑣的操作.

四、如何部署使用

1.下載開發庫

  1.開源地址

  http://pan.baidu.com/s/1slCMspR

  2.動態鏈接庫地址 (下方項目實例DEMO中有)

2. 引用動態鏈接庫

  1.引用Moon.Mvc動態鏈接庫到項目中

  2.根據你的需要引入Moon.Orm、FluentValidation

  3.配置web.config文件

  1)在<system.web>節點下配置如下內容 

<pages pageParserFilterType="Moon.Mvc.ViewTypeParserFilter, Moon.Mvc"
            pageBaseType="Moon.Mvc.MViewPage,Moon.Mvc"  enableViewState="false" enableViewStateMac="false"
         autoEventWireup="false"
           >
      <namespaces>
        <add namespace="Moon.Mvc" />
        <add namespace="System.Collections.Generic"/>
      </namespaces>
</pages>

   2)配置httpHandler

  1.集成模式.(現在windows server基本上都用集成模式) configuration節點下直接使用如下配置

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

  2.經典模式(老版本IIS,包括xsp4 mono)

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

4. 開發項目文件結構

  在項目根目錄下添加Controllers文件夾(非必須),Views文件夾

如項目結構如下圖所示,類似於微軟MVC的結構,但路由注冊確有些差別.

5.注冊路由規則

  這里有一個很簡便的方式,直接通過一行代碼進行:我們在Global.asax.cs文件中為Global類的Application_Start方法添加如下代碼

protected void Application_Start(object sender, EventArgs e)
{
			
	UrlRouteCenter.MapRouteBinPlugin("RbProject");
}

這樣一切就OK了.

6.設置項目默認頁面

  同樣在Global中添加

protected void Application_BeginRequest(object sender, EventArgs e)
{
	UrlRouteCenter.SetDefaultRoute<RbProject.Controllers.HomeController>(this,"Index");
}

7.添加控制器

  我們可以通過繼承Moon.Mvc.BaseController的方式,使一個類成為一個控制器,

其中的每一個public方法可以作為Action.形如下圖

public class HomeController :BaseController
{
		[Get]
		[TemplateResult]//默認采用~/Views/Home/Index.aspx的文件作為視圖文件
		public User Index()
		{
			ViewData["CurrentRootUrl"]=ROOT_URL;
			return new User(){Name="test",Age=12};
		}
}

  如果要讓一個控制器屬於一個Area,可以在這個類上應用Area特性,形如:

    [Area("Back")]
    public class AdminController:BaseController
    {
         
    }

8.編譯項目然后在Linux上部署運行(Windows上就不用說了)

  這里我們推薦使用Mono團隊的XSP4(一個類似於IIS的托管宿主),采用UBuntu LTS版本

在終端中運行如下命令:

sudo apt install mono-xsp

如果沒有安裝mono,請安裝mono(sudo apt install mono-runtime)

  安裝完畢之后,把編譯好的項目復制到一個Linux目錄下,然后在項目根目錄中右鍵打開終端

輸入命令 sudo xsp ,這時候項目就跑起來了,端口默認9000,如果需要進一步了解xsp,請看如下

官方鏈接:

  ​http://www.mono-project.com/docs/web/aspnet/

 四、項目結構介紹

 

  因為時間精力問題,現在不能對每一個模塊進行說明,之后有時間對他們進行一一說明.例如底層實現原理,以及模板引擎、Model自動化驗證機制、路由注冊、面向方面編程、客戶端緩存等諸多功能.后續文章陸續進行說明,大家可以通過給出的項目Demo和源代碼先自行閱讀.

 五、項目實例

      以下項目是一網友的一個類威客任務的一個平台,BS/CS整合項目,服務端采用Moon.Mvc開發,

可以直接部署在Linux上

六、項目DEMO實例

http://pan.baidu.com/s/1jHQX3fS (直接可以運行在Linux和Windows上)

 歡迎加入交流群: 216965349


免責聲明!

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



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