分享一实战性开源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
分享一实战性开源MVC框架<Linux、Windows跨平台开发so easy>的更多相关文章
- 【原创】三分钟教你学会MVC框架——基于java web开发(2)
没想到我的上一篇博客有这么多人看,还有几位看完之后给我留言加油,不胜感激,备受鼓励,啥都别说了,继续系列文章之第二篇.(如果没看过我第一篇博客的朋友,可以到我的主页上先浏览完再看这篇文章,以免上下文对 ...
- 【原创】三分钟教你学会MVC框架——基于java web开发(1)
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用于组织代码用一种业务逻辑和数据显示分离的方法. ...
- wxWidgets 的 Linux / Windows 混合开发环境
目标 建立一个开发 GUI 交互界面程序的环境,要求: 以 C/C++ 为主要程序设计语言. 最好能充分利用已有的 MFC 开发经验. 以 Linux 为主要开发环境.可以在 Windows 中编译并 ...
- 基于MVC框架的JavaWeb网站开发demo项目(JSP+Servlet+JavaBean)
1.环境配置 Windows10+Eclipse2020+jdk8+Tomcat9+MySQL8+Navicat10 2.需求分析 ①用户登录注册注销(查找.增加) ②显示用户列表(查找) ③显示用户 ...
- 基于“MVC”框架集设计模式,开发用户管理系统!
MVC----(Model View Controller)设计模型: M:表示业务数据和业务规则.包括DAO(beans).DBHelper(DBHelper),用于封装数据库连接,业务数据库处理. ...
- 框架学习笔记:Unity3D的MVC框架——StrangeIoC
作为从AS3页游走过来的人,看见StrangeIoC会额外亲切,因为StrangeIoC的设计和RobotLegs几乎一致,作为一款依赖注入/控制反转(IoC)的MVC框架,StrangeIoC除了使 ...
- .NET Web开发之.NET MVC框架
摘要:MVC是一种架构设计模式,该模式主要应用于图形化用户界面(GUI)应用程序.那么什么是MVC?MVC由三部分组成:Model(模型).View(视图)及Controller(控制器). MVC概 ...
- 2014-07-30 MVC框架中对SQL Server数据库的访问
今天是在吾索实习的第16天.我自己主要学习了基于MVC框架的系统的开发时,对SQL Server数据库的相关访问.其步骤如下: 第一步,在Models文件夹中创建一个类,并命名为Movies.cs,如 ...
- 自己动手写PHP MVC框架
自己动手写PHP MVC框架 来自:yuansir-web.com / yuansir@live.cn 代码下载: https://github.com/yuansir/tiny-php-framew ...
随机推荐
- Node.js:path、url、querystring模块
Path模块 该模块提供了对文件或目录路径处理的方法,使用require('path')引用. 1.获取文件路径最后部分basename 使用basename(path[,ext])方法来获取路径的最 ...
- javascript表单的Ajax 提交插件的使用
Ajax 提交插件 form.js 表单的下载地址:官方网站:http://malsup.com/jquery/form/ form.js 插件有两个核心方法:ajaxForm()和ajaxSubmi ...
- Xamarin与Visual stuido2015离线安装包分享
最近看见大伙留言才知道国内安装Xamarin开发原来这么艰辛啊! 第一:网速不快 第二:Android SDK下载受限 等等... 鉴于这些原因,特写下这篇文章以及分享打包好的离线包以帮助大家尽快体验 ...
- Redis百亿级Key存储方案(转)
1 需求背景 该应用场景为DMP缓存存储需求,DMP需要管理非常多的第三方id数据,其中包括各媒体cookie与自身cookie(以下统称supperid)的mapping关系,还包括了supperi ...
- 当web.config文件放置在共享目录下(UNC),启动IIS会提示有错误信息500.19,伴随有错误代码0x80070003和错误代码0x80070005的解决办法
最近遇到一个很有意思的使用环境,操作人员将所有的网站应用内容投放到共享存储里面,并且使用微软的SMB协议将其以CIFS的方式共享出来,使用Windows Server 2008 R2的IIS将其连接起 ...
- 使用RequireJS并实现一个自己的模块加载器 (一)
RequireJS & SeaJS 在 模块化开发 开发以前,都是直接在页面上引入 script 标签来引用脚本的,当项目变得比较复杂,就会带来很多问题. JS项目中的依赖只有通过引入JS的顺 ...
- JavaScript求两个数字之间所有数字的和
这是在fcc上的中级算法中的第一题,拉出来的原因并不是因为有什么好说的,而是我刚看时以为是求两个数字的和, 很显然错了.我感觉自己的文字理解能力被严重鄙视了- -.故拉出来折腾折腾. 要求: 给你一个 ...
- Atitit 解决Unhandled event loop exception错误的办法
Atitit 解决Unhandled event loop exception错误的办法 查看workspace/.metadata/.log org.eclipse.swt.SWTError: No ...
- bzoj1531: [POI2005]Bank notes
Description Byteotian Bit Bank (BBB) 拥有一套先进的货币系统,这个系统一共有n种面值的硬币,面值分别为b1, b2,..., bn. 但是每种硬币有数量限制,现在我 ...
- 在ASP.NET MVC 4 on Mono中使用OracleClient in CentOS 6.x的问题记录
在ASP.NET MVC 4 on Mono中使用OracleClient in CentOS 6.x的问题记录 前言 最近有个Web项目,业务功能不复杂,但是这个客户(某政府部门)有两个硬性要求:1 ...