分享一实战性开源MVC框架Linux、Windows跨平台开发so easy

时间:2022-04-23 23:28:27

标签:

一、引子  

    开源地址

  

.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.开源地址

  

  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 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.形如下图