> Linux教程 >

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(事实上也无法依赖了),通过一些其他的小技巧来定位以及解决我们的问题。

(责任编辑:IT)