一、引子  

    开源地址

  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

分享一实战性开源MVC框架<Linux、Windows跨平台开发so easy>的更多相关文章

  1. 【原创】三分钟教你学会MVC框架——基于java web开发(2)

    没想到我的上一篇博客有这么多人看,还有几位看完之后给我留言加油,不胜感激,备受鼓励,啥都别说了,继续系列文章之第二篇.(如果没看过我第一篇博客的朋友,可以到我的主页上先浏览完再看这篇文章,以免上下文对 ...

  2. 【原创】三分钟教你学会MVC框架——基于java web开发(1)

    MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用于组织代码用一种业务逻辑和数据显示分离的方法. ...

  3. wxWidgets 的 Linux / Windows 混合开发环境

    目标 建立一个开发 GUI 交互界面程序的环境,要求: 以 C/C++ 为主要程序设计语言. 最好能充分利用已有的 MFC 开发经验. 以 Linux 为主要开发环境.可以在 Windows 中编译并 ...

  4. 框架学习笔记:Unity3D的MVC框架——StrangeIoC

    作为从AS3页游走过来的人,看见StrangeIoC会额外亲切,因为StrangeIoC的设计和RobotLegs几乎一致,作为一款依赖注入/控制反转(IoC)的MVC框架,StrangeIoC除了使 ...

  5. .NET Web开发之.NET MVC框架

    摘要:MVC是一种架构设计模式,该模式主要应用于图形化用户界面(GUI)应用程序.那么什么是MVC?MVC由三部分组成:Model(模型).View(视图)及Controller(控制器). MVC概 ...

  6. 2014-07-30 MVC框架中对SQL Server数据库的访问

    今天是在吾索实习的第16天.我自己主要学习了基于MVC框架的系统的开发时,对SQL Server数据库的相关访问.其步骤如下: 第一步,在Models文件夹中创建一个类,并命名为Movies.cs,如 ...

  7. 自己动手写PHP MVC框架

    自己动手写PHP MVC框架 来自:yuansir-web.com / yuansir@live.cn 代码下载: https://github.com/yuansir/tiny-php-framew ...

  8. 教你快速打造PHP MVC框架

    简介 MVC框架在现在的开发中相当流行,不论你使用的是JAVA,C#,PHP或者IOS,你肯定都会选择一款框架.虽然不能保证100%的开发语言都会使用框架,但是在PHP社区当中拥有最多数量的MVC框架 ...

  9. REST风格框架实战:从MVC到前后端分离(附完整Demo)

    既然MVC模式这么好,难道它就没有不足的地方吗?我认为MVC至少有以下三点不足:(1)每次请求必须经过“控制器->模型->视图”这个流程,用户才能看到最终的展现的界面,这个过程似乎有些复杂 ...

随机推荐

  1. 5.openstack之mitaka搭建计算节点

    部署计算节点(compute服务) 一:控制节点配置 1.建库建用户 CREATE DATABASE nova_api; CREATE DATABASE nova; GRANT ALL PRIVILE ...

  2. shiro和quartz同时存在于项目中,解决冲突的方案

    shiro自带了quartz定时任务,不过版本是1.3的 很多项目都会使用shiro,另外定时任务也会使用,quartz的版本2.2目前和shiro不兼容 有人通过修改源码可以解决 我这边是这样解决的 ...

  3. enmo_day_09

    1. 数据库 select name from v$database; : 数据库名称 select db_unique_name from v$database; : 数据库唯一名称 select ...

  4. 中南大学第一届长沙地区程序设计邀请赛 To Add Which?

    1350: To Add Which? Time Limit: 1 Sec  Memory Limit: 128 MB Description There is an integer sequence ...

  5. struts2学习笔记(3)——struts2的局部类型转换

    今天又学到了一个新的东西,就是struts2的类型转换. 为什么要类型转换? 今天我就要传一个点的坐标给你,保存时用一个自定义的Point类来保存. 因为在表单里面传过去的是字符串,如“12,23”, ...

  6. Seeking USB Serial Com Port in Windows Automatically : via PID VID

    After you read previous article, you might know how to operate a com port in Windows.    But that ex ...

  7. Data Structure(2)

    在大体看过一遍<数据结构导论>的基础上完成了上一篇的博客,周五晚上通过上讲课,还是发现了一些问题的,主要体现在对第一章看的比较粗心,第一章的概论其实是对整本书的整体概况,这里没有多看上几遍 ...

  8. 活动倒计时-兼容ios

    最近要做一个活动,需要用倒计时,写好之后再IOS上无效,经过百度知道了,原来IOS不能识别格式"2017-11-09 --",所以要进行转换才有效 直接上代码了: <!DOC ...

  9. 【HTML+CSS】在书写代码时的便捷应用

    创建多个相同元素: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...

  10. 动态sql语句,非存储过程,如何判断某条数据是否存在,如果不存在就添加一条

    已知一个表 table 里面有两个字段  A1 和 A2 如何用动态语句 判断 A1 = A , A2=B 的数据是否存在,如果不存在,就添加一条数据, A1 = A , A2 = B INSERT  ...