为Linux重新开发MVC,有图有真相
1.写在前面
就连我们自己开始时也在问自己:我们为什么要开发一套MVC,微软的难道不可用用吗?
一开始的理由很简单.为了更好地跨平台部署;在Linux部署过.NET的人们应该知道,
部署起来是有点繁琐的.自己试试就知道了:
文件名问题、版本问题、兼容问题................
但当我们仔细思考后发现了有些东西势在必行.
2.我们的原因
1)我们需要更好的跨平台框架
正如概述里提到的,微软的MVC不能够直接提供支持..从开发的角度来看你的开发环境需要重新配置一番,你的服务器运行环境同样需要
繁琐的配置.而我们需要的效果很直接:一套代码无论是在IDE中还是在IIS或Linux Web服务器上都能无缝运行.
简单来讲,代码搬过去搬过来都能很好调试、运行、无需繁琐的配置.
而微软的MVC始终在为其Windows Server考虑.
2)我们需要更优秀的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 = ;
st.Birth = DateTime.Now.AddYears(-);
st.Fa = new Father();
st.Fa.Age = ;
st.Fa.Name = "Father1";
st.Fa.Mother = new Mother() { Name = "mm", Age = };
return View(st);
}
现在我们提出两个疑问:
1. 如果上面的业务功能我需要在其他代码中使用怎么办?比如:我有一个查询功能就是这样的模式.----代码重用率
2.如果我要对这段代码进行自动化测试怎么办?或许你有好方法----但这是一个问题.
假如,MVC的Action 为以下代码,那么所有的问题就不是问题了.
public Student GetStudent(int id)
{
Student st = new Student();
st.Email = "q@q.com";
st.Name = "秦时明月<>" + DateTime.Now.ToShortDateString();
st.Password = "pwd";
st.PID = ;
st.Birth = DateTime.Now.AddYears(-);
st.Fa = new Father();
st.Fa.Age = ;
st.Fa.Name = "Father1";
st.Fa.Mother = new Mother() { Name = "mm", Age = };
return st;
}
以上仅仅是一个引子.还有很多其他类似问题,我们以后再讨论.
3)我们要更好的Debug环境
当然你说你可以把微软的MVC源代码拿进来做调试,
但我也可以问你:你在一刻钟之内能够将其集成到你的项目中进行调试吗?
3.项目截图
<%=Html.TextBoxFor(m => m.Name) %><br />
<%=Html.TextBoxFor(m => m.Password) %><br />
<%=Html.TextBoxFor(m => m.PID) %><br />
<%=Html.TextBoxFor(m => m.Birth) %><br />
<%=Html.TextBoxFor(m => m.Fa.Name) %><br />
<%=Html.TextBoxFor(m => m.Fa.Mother.Name) %><br />
<%=Html.TextBoxFor(m => m.Fa.Mother.Age) %><br />
4.配置过程.
从dll包里面引用
1.引用Moon.Web,(Moon.Orm,FluentValidation 可以不引用)
2.配置web.config的page节点.
<pages pageParserFilterType="Moon.Web.ViewTypeParserFilter, Moon.Web"
pageBaseType="Moon.Web.MViewPage,Moon.Web" enableViewState="false" enableViewStateMac="false"
autoEventWireup="false"
>
<namespaces>
<add namespace="Moon.Web" />
</namespaces>
</pages>
3.配置handler
1)若集成模式.(现在WINDOWS SERVER基本上都用集成模式) configuration节点下直接使用如下配置
<system.webServer>
<handlers>
<add name="RequestHandler" path="*.htm" verb="*" type="Moon.Web.RequestHandler, Moon.Web" />
</handlers>
</system.webServer>
2)若经典模式(老版本IIS,包括xsp4 mono)
<configuration>
<system.web> 下配置.
<httpHandlers>
<add path="*.htm" verb="*" type="Moon.Web.RequestHandler, Moon.Web" />
</httpHandlers>
4.添加文件夹
在项目根目录下添加
Controllers文件夹(非必须)
Views文件夹
如上面项目结构图所示.
5.创建Controller
如下所示,继承BaseController即可.
然后在global文件中注册路由
6.创建视图
为Linux重新开发MVC,有图有真相的更多相关文章
- 为.NET搭建Linux的开发环境,鄙视那些将简单事情复杂化的人
写在前面的吐槽 原本跨平台开发很容易的事情, 很多人把它弄得很麻烦,给外人的感觉:你们.NET跨平台开发好不成熟,好麻烦哦. ..................................... ...
- Core开发-MVC 使用dotnet 命令创建Controller和View
NET Core开发-MVC 使用dotnet 命令创建Controller和View 使用dotnet 命令在ASP.NET Core MVC 中创建Controller和View,之前讲解过使 ...
- 关于linux asp.net MVC网站中 httpHandlers配置无效的处理方法
近期有Jexus用户反映,在Linux ASP.NET MVC网站的Web.config中添加 httpHandlers 配置用于处理自定义类型,但是在运行中并没有产生预期的效果,服务器返回了404( ...
- 驱动开发学习笔记. 0.06 嵌入式linux视频开发之预备知识
驱动开发读书笔记. 0.06 嵌入式linux视频开发之预备知识 由于毕业设计选择了嵌入式linux视频开发相关的项目,于是找了相关的资料,下面是一下预备知识 UVC : UVC,全称为:USB v ...
- 如何参与Linux内核开发(转)
本文来源于linux内核代码的Document文件夹下的Hoto文件.Chinese translated version of Documentation/HOWTO If you have any ...
- 嵌入式Linux驱动开发日记
嵌入式Linux驱动开发日记 主机硬件环境 开发机:虚拟机Ubuntu12.04 内存: 1G 硬盘:80GB 目标板硬件环境 CPU: SP5V210 (开发板:QT210) SDRAM: 512M ...
- 嵌入式linux应用开发完全手册学习笔记一
2015.3.25星期三 晴 有两个星期没写学习日记了,找个时间把这段时间做的电子词典和ARM小项目总结一下. 下面的知识点总结,U-BOOT:参考PDF文档:嵌入式linux应用开发完全手册 当虚拟 ...
- 专访Linux嵌入式开发韦东山操作系统图书作者--转
CSDN学院讲师韦东山:悦己之作,方能悦人 发表于2015-04-28 08:09| 6669次阅读| 来源CSDN| 24 条评论| 作者夏梦竹 专访Linux嵌入式开发韦东山操作系统图书作者 摘要 ...
- 嵌入式linux驱动开发之点亮led(驱动编程思想之初体验)
这节我们就开始开始进行实战啦!这里顺便说一下啊,出来做开发的基础很重要啊,基础不好,迟早是要恶补的.个人深刻觉得像这种嵌入式的开发对C语言和微机接口与原理是非常依赖的,必须要有深厚的基础才能hold的 ...
随机推荐
- Silverlight 使用DataContractJsonSerializer序列化与反序列化 Json
环境说明:Silverlight 5.1,.Net Framework 4.0 1.添加引用System.ServiceModel.Web.dll. 因为 System.Runtime.Seria ...
- 第一章-第十四题(Hello world程序)
题目:请找一个同学结对 (参看本书结对编程的内容),两人共同工作 (不能分开干活),从上面的列表中选取两个平台,在每个平台上,写一个最简单的 "Hello World" 类型的程序 ...
- WDM驱动加载方式理解
当PC得知有新设备插入时,总线驱动会创建相应的物理驱动PDO,然后提示有新设备插入,这时候调用相应Driver的AddDevice方法创建功能驱动FDO 下面是一个典型的AddDevice方法 #pr ...
- 转:隐马尔可夫模型(HMM)攻略
隐马尔可夫模型 (Hidden Markov Model,HMM) 最初由 L. E. Baum 和其它一些学者发表在一系列的统计学论文中,随后在语言识别,自然语言处理以及生物信息等领域体现了很大的价 ...
- ASP.Net请求处理机制初步探索之旅 - Part 2 核心
开篇:上一篇我们了解了一个请求从客户端发出到服务端接收并转到ASP.Net处理入口的过程,这篇我们开始探索ASP.Net的核心处理部分,借助强大的反编译工具,我们会看到几个熟悉又陌生的名词(类):Ht ...
- TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端)、UDP客户端
目录 说明 TCP/UDP通信主要结构 管理多个Socket的解决方案 框架中TCP部分的使用 框架中UDP部分的使用 框架源码结构 补充说明 源码地址 说明 之前有好几篇博客在讲TCP/UDP通信方 ...
- Java static 的一两点使用
这篇文章是关于Java static关键字的使用,主要会介绍以下的内容: static 的概念 static的各种应用 总结 static 是什么 static 顾名思义是静态的意思.与this相对, ...
- 朴素贝叶斯(NB)复习总结
摘要: 1.算法概述 2.算法推导 3.算法特性及优缺点 4.注意事项 5.实现和具体例子 6.适用场合 内容: 1.算法概述 贝叶斯分类算法是统计学的一种分类方法,其分类原理就是利用贝叶斯公式根据某 ...
- [Canvas前端游戏开发]——FlappyBird详解
一直想自己做点小东西,直到最近看了本<HTML5游戏开发>,才了解游戏开发中的一点点入门知识. 本篇就针对学习的几个样例,自己动手实践,做了个FlappyBird,源码共享在度盘 :也可以 ...
- iOS开发--应用崩溃日志揭秘(二)
场景 4: 吃棒棒糖时闪退! 用户邮件说, “当rage master吃棒棒糖时应用就闪退…” 另一用户说, “我让rage master 吃棒棒糖,没几次应用就闪退了!”崩溃日志如下: Incide ...