zoukankan      html  css  js  c++  java
  • 分享一实战性开源MVC框架<Linux、Windows跨平台开发so easy>

    一、引子  

        开源地址

      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

  • 相关阅读:
    【python之路39】Python 正则表达式
    【html、CSS、javascript-4】新特征之增强表单
    node调试工具--node-inspector安装
    node多版本管理--nvmw
    transform的影响
    HTML5 input事件检测输入框变化[转载]
    mysql5.7.16安装 初始密码获取及密码重置
    undefined 与void 0
    html 自定义标签使用实现方法
    图片轮播滚动
  • 原文地址:https://www.cnblogs.com/humble/p/5932983.html
Copyright © 2011-2022 走看看