Linux.NET实战手记—自己动手改泥鳅(上)
各位读者大家好,不知各位读者有否阅读在下的前一个系列《Linux.NET 学习手记》,在前一个系列中,我们从Linux中Mono的编译安装开始,到Jexus服务器的介绍,以及如何在Linux中简单的部署自己的WebForm程序和ASP.NET MVC应用程序。如果各位读者有阅读该系列的文章并且成功的实现上面的每一个功能点,那么小弟认为,你对Linux.NET已经入门,剩下的就是各自在Linux.NET中自由发挥,在这另一天地中做自己爱做的事,创出一番更新的新天地来。
为此,在下推出一个新的系列——Linux.NET实战手记,该系列主要用于记录我在使用Linux.NET中的点点滴滴,在记录的同时与各位读者朋友分享。小弟不才,没有办法保证所有的方法都是最科学以及真正可行,如有任何不妥的地方,还望各位读者不吝指正。
先进入本回合,在本回合中,我们会对一个开源的个人博客——小泥鳅 进行改造,以其让它能够在Linux.NET中正常的使用,由于该过程内容较多,因此无法在一篇文章中叙述完成,我们将采用分回合的方式来逐步分解其过程。
在本回合中,我们暂时停留在win下对小泥鳅进行初改造,我们将讨论学习:
1、什么小泥鳅,为什么是小泥鳅
2、对小泥鳅的风险性、成功率的分析,以及促使成功的要素有哪些
3、对MS.NET与Mono使用相同数据库驱动器前提下的数据访问层改造。
本文中的代码已经托管到GitHub(https://github.com/xiaodiejinghong/Loachs4Mono)中,有兴趣的读者可以点击打开下载,当然各位读者也可以点击这里获得包括原始代码包和托管代码的打包。
1、什么是小泥鳅,为什么是小泥鳅
本文中,不想用过多的话语,一句话:小泥鳅,Loachs,是一款开源的个人博客系统,官网:http://www.loachs.com/,原作者:沩水老农。
至于为什么选择小泥鳅,基于以下三个方面:
1、近期内可能需要用到一个个人博客系统。
2、界面非常经典,基本上可以马上上手使用,也挺符合在下的审美观。
3、早前一段时间就通过该系统,并且暂时对网上有哪些开源的个人博客系统不太清楚。
嘿嘿,说了半天还是个人原因,勿拍砖哈。
2、对小泥鳅的风险性、成功率的分析,以及促使成功的要素有哪些
当我们决定去干一件事的时候,我们需要先考虑它的可行性,像“把太阳用弓箭射下来”之类的神话般的事情我们不会做,同样的,如果代码里面遍布WCF或者Entity FrameWork的项目,我们就无谓自我折腾了,即使真的成功了,也是杀敌一千自损八百,相当的不值得。
而对于小泥鳅来说,有几点则是非常关键的:
第一、它的FrameWork版本仅仅为FrameWork 2.0,没错,只是2.0,并没有采用最新版的FrameWork。这点是根本,倘若小泥鳅采用的是FrameWork 4.5或以上,这就麻烦了,要知道,微软“刷版本”的速度极快,早在前两天ASP.NET MVC 5.1和WebAPI 2.1就已经发布,可是我们扪心自问一下,自己或许连MVC 5.0的文档还没有看多几份,VS 2012 还没办法通过独立的安装方式得到MVC 5.0 的模板。同样的,纵使Mono团队的办事效率再高,也很难完美的跟上微软的节奏。因此,一旦小泥鳅使用了Mono还不支持的Framework版本,那么后面的东西都不用玩了。
第二、我们看一下小泥鳅的项目组织机构:
抛开那个不可用且不影响系统的Loachs.Build,小泥鳅系统中包含了:一个包含页面、css、js等与用户直接做交互的Web层,一个包含系统业务逻辑、工具类以及数据访问接口的核心代码区core层,以及一个实现core层中数据访问接口的数据访问层。相当的清晰明了。当我们想要对小泥鳅进行二次开发,修改它支持的数据库的时候,只需增加多一个实现core层数据访问接口的类库,即可完成对其他数据库的支持。
第三、再看看现有的数据访问层“Loachs.Data.Access”,我们需要的SQL语句都在里面,我们在制作其他数据库的访问层的时候,只需要把当前访问层的SQL语句稍微修改,让它在其他数据库中成功的跑起来即可,而由于标准的SQL语句的关系,我们所需要耗费的工作量大大的减少。
第四、由于FrameWork版本的关系,整套系统中没有出现在Linux.NET中知名的坑(如WCF、Entity FrameWork等),同时因为小泥鳅是一个相对独立的系统,没有与操作系统发生严重的关联关系,没有直接的调用到操作系统的API,我们无需对系统发生大规模的改造。
最后、代码中对文件、对类、对URL基本上编码大小写敏感(个别除外),我们无需花更多的时间进行修正(当然,我们也可以在Jexus中设置Mono,让Linux.NET不区分大小写)。
综上所述,对小泥鳅的改造风险较低,成功率较高,值得改造。
3、对MS.NET与Mono使用相同数据库驱动器前提下的数据访问层改造
相信很多的读者会或多或少的把MS的.NET与Mono作关联,把两者之间的动态库进行对等,其实这并不然,虽然对于大部分的库文件来说,两者之间是可以通用的,但是仍然有不少的库是需要加以区别的。在本小节中,我们先从通用的库入手,最大限度的完成初始的工作。
我们先添加一层MYSQL的类库
然后用Nuget安装上我们的驱动。
接着建立我们的Mysql数据库,各位读者可以通过手写、使用工具或者最简单的执行托管代码中“app_data"目录中的脚本进行创建(注意别漏了表的主键和自增)。
然后就是非常低级的拷贝代码、改代码工序,此处就不花费文字来说明了。
只是有几个地方需要注意一下的:
(1)、Linux中有大小写敏感,同样在MySQL中也不例外,小心你的表名和字段名
(2)、在"Loachs.Data.Access"中,表名和字段名都有中括号括起来了,记得要清除一下
(3)、分页功能在MySQL比较简便,不用top,直接使用limit即可
改好了之后,在”Loachs.Core“中”Data/DataAccess.cs“文件的path修改为”Loachs.Data.MYSQL“即可。
然后编译,在vs自带的调试web服务器中发布。
正常运作即可,非常简单,跟在windows中开发一模一样。
至此,本回合到此先告一段落,不知各位读者是否由此感觉:“这跟开发普通的.NET根本没有任何差别”。是的,本就没有太大的差别,只要开发时多加一个心眼,多注意编码的规范,其余的就没什么太大的要求了。Linux.NET并不是什么遥不可及的东西,只要稍加动手,你很快就会沉浸在其中了。
在下回合中,我们将会把我们在Windows中改好的项目发布到Linux中,并对它运行时所出现的问题进行修复,我们将不再依赖于Visual Studio(事实上也无法依赖了),通过一些其他的小技巧来定位以及解决我们的问题。
Linux.NET实战手记—自己动手改泥鳅(上)的更多相关文章
- Linux.NET实战手记—自己动手改泥鳅(下)
在上回合中,我们不痛不痒的把小泥鳅的数据库从只能供在Windows下运行的Access数据库改为支持跨平台的MYSQL数据库,毫无营养的修改,本回合中,我们将把我们修改后得来的项目往Linux中部署. ...
- Linux.NET学习手记(7)
前一篇中,我们简单的讲述了下如何在Linux.NET中部署第一个ASP.NET MVC 5.0的程序.而目前微软已经提出OWIN并致力于发展VNext,接下来系列中,我们将会向OWIN方向转战. 早在 ...
- Linux.NET学习手记(8)
上一回合中,我们讲解了Linux.NET面对OWIN需要做出的准备,以及介绍了如何将两个支持OWIN协议的框架:SignalR以及NancyFX以OwinHost的方式部署到Linux.NET当中.这 ...
- 关于《Linux.NET学习手记(8)》的补充说明
早前的一两天<Linux.NET学习手记(8)>发布了,这一篇主要是讲述OWIN框架与OwinHost之间如何根据OWIN协议进行通信构成一套完整的系统.文中我们还直接学习如何直接操作OW ...
- 嵌入式Linux启动优化手记2 U…
参考一下 原文地址:U-boot优化">嵌入式Linux启动优化手记2 U-boot优化作者:ZhaoJunling 既然不能使用新的U-boot,那就优化一点是一点,慢慢干吧. 1. ...
- LR添加Windows和Linux压力机实战
添加Windows和Linux压力机实战 既然Controller是LoadRunner的“心脏”,那么压力产生也必然是它发起的,通过压力机来对被测系统产生压力.一般压力机分为Windows和Linu ...
- Linux系统实战项目——sudo日志审计
Linux系统实战项目——sudo日志审计 由于企业内部权限管理启用了sudo权限管理,但是还是有一定的风险因素,毕竟运维.开发等各个人员技术水平.操作习惯都不相同,也会因一时失误造成误操作,从而 ...
- Linux+Redis实战教程_day01_Linux介绍与安装
1.Linux介绍(了解) 1.1.Linux和Windows的区别 Linux是一款操作系统.正规开发 服务器项目部署都是放在Linux操作系统上. Windows一款操作系统,民用操作系统.娱乐. ...
- SpringSecurity权限管理系统实战—四、整合SpringSecurity(上)
目录 SpringSecurity权限管理系统实战-一.项目简介和开发环境准备 SpringSecurity权限管理系统实战-二.日志.接口文档等实现 SpringSecurity权限管理系统实战-三 ...
随机推荐
- vmware里面的名词 vSphere、vCenter Server、ESXI、vSphere Client
vmware里面的名词 vSphere.vCenter Server.ESXI.vSphere Client vSphere.vCenter Server.ESXI.vSphere Client VS ...
- 背后的故事之 - 快乐的Lambda表达式(一)
快乐的Lambda表达式(二) 自从Lambda随.NET Framework3.5出现在.NET开发者眼前以来,它已经给我们带来了太多的欣喜.它优雅,对开发者更友好,能提高开发效率,天啊!它还有可能 ...
- .NET Core的日志[3]:将日志写入Debug窗口
定义在NuGet包"Microsoft.Extensions.Logging.Debug"中的DebugLogger会直接调用Debug的WriteLine方法来写入分发给它的日志 ...
- DDD 领域驱动设计-谈谈 Repository、IUnitOfWork 和 IDbContext 的实践(3)
上一篇:<DDD 领域驱动设计-谈谈 Repository.IUnitOfWork 和 IDbContext 的实践(2)> 这篇文章主要是对 DDD.Sample 框架增加 Transa ...
- Consul-template的简单应用:配置中心,服务发现与健康监测
简介 Consul-template是Consul的一个方扩展工具,通过监听Consul中的数据可以动态修改一些配置文件,大家比较热衷于应用在Nginx,HAProxy上动态配置健康状态下的客户端反向 ...
- RabbitMQ + PHP (三)案例演示
今天用一个简单的案例来实现 RabbitMQ + PHP 这个消息队列的运行机制. 主要分为两个部分: 第一:发送者(publisher) 第二:消费者(consumer) (一)生产者 (创建一个r ...
- NSURLSession详解
导语 现在NSURLConnection在开发中会使用的越来越少,iOS9已经将NSURLConnection废弃,现在最低版本一般适配iOS7,所以也可以使用. NSURLConnection相对于 ...
- java 字节流与字符流的区别
字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢?实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作 ...
- github入门到上传本地项目【网上资源整合】
[在原文章的基础上,修改了描述的不够详细的地方,对内容进行了扩充,整合了网上的一些资料] [内容主要来自http://www.cnblogs.com/specter45/p/github.html#g ...
- spring boot1
spring boot 玩转spring boot--快速开始 开发环境: IED环境:Eclipse JDK版本:1.8 maven版本:3.3.9 一.创建一个spring boot的mcv ...