各位读者大家好,不知各位读者有否阅读在下的前一个系列《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实战手记—自己动手改泥鳅(上)的更多相关文章

  1. Linux.NET实战手记—自己动手改泥鳅(下)

    在上回合中,我们不痛不痒的把小泥鳅的数据库从只能供在Windows下运行的Access数据库改为支持跨平台的MYSQL数据库,毫无营养的修改,本回合中,我们将把我们修改后得来的项目往Linux中部署. ...

  2. Linux.NET学习手记(7)

    前一篇中,我们简单的讲述了下如何在Linux.NET中部署第一个ASP.NET MVC 5.0的程序.而目前微软已经提出OWIN并致力于发展VNext,接下来系列中,我们将会向OWIN方向转战. 早在 ...

  3. Linux.NET学习手记(8)

    上一回合中,我们讲解了Linux.NET面对OWIN需要做出的准备,以及介绍了如何将两个支持OWIN协议的框架:SignalR以及NancyFX以OwinHost的方式部署到Linux.NET当中.这 ...

  4. 关于《Linux.NET学习手记(8)》的补充说明

    早前的一两天<Linux.NET学习手记(8)>发布了,这一篇主要是讲述OWIN框架与OwinHost之间如何根据OWIN协议进行通信构成一套完整的系统.文中我们还直接学习如何直接操作OW ...

  5. 嵌入式Linux启动优化手记2&nbsp;U…

    参考一下 原文地址:U-boot优化">嵌入式Linux启动优化手记2 U-boot优化作者:ZhaoJunling 既然不能使用新的U-boot,那就优化一点是一点,慢慢干吧. 1. ...

  6. LR添加Windows和Linux压力机实战

    添加Windows和Linux压力机实战 既然Controller是LoadRunner的“心脏”,那么压力产生也必然是它发起的,通过压力机来对被测系统产生压力.一般压力机分为Windows和Linu ...

  7. Linux系统实战项目——sudo日志审计

    Linux系统实战项目——sudo日志审计   由于企业内部权限管理启用了sudo权限管理,但是还是有一定的风险因素,毕竟运维.开发等各个人员技术水平.操作习惯都不相同,也会因一时失误造成误操作,从而 ...

  8. Linux+Redis实战教程_day01_Linux介绍与安装

    1.Linux介绍(了解) 1.1.Linux和Windows的区别 Linux是一款操作系统.正规开发 服务器项目部署都是放在Linux操作系统上. Windows一款操作系统,民用操作系统.娱乐. ...

  9. SpringSecurity权限管理系统实战—四、整合SpringSecurity(上)

    目录 SpringSecurity权限管理系统实战-一.项目简介和开发环境准备 SpringSecurity权限管理系统实战-二.日志.接口文档等实现 SpringSecurity权限管理系统实战-三 ...

随机推荐

  1. 【.net 深呼吸】细说CodeDom(1):结构大观

    CodeDom 是啥东东?Html Dom听过吧,XML Dom听过吧.DOM一般可翻译为 文档对象模型,那 Code + DOM呢,自然是指代码文档模型了.如果你从来没接触过 CodeDom,你大概 ...

  2. 使用struct处理二进制

    有的时候需要用python处理二进制数据,比如,存取文件.socket操作时.这时候,可以使用python的struct模块来完成. struct模块中最重要的三个函数是pack(), unpack( ...

  3. 使用Monit监控本地进程

    目前用它监控某些服务,失败自动重启,同时监控特定的日志文件,如果有变化,就发邮件报警 安装不细写了,网上好多 我先用cat /proc/version看了下我的系统是el6的,于是wget http: ...

  4. [ 高并发]Java高并发编程系列第二篇--线程同步

    高并发,听起来高大上的一个词汇,在身处于互联网潮的社会大趋势下,高并发赋予了更多的传奇色彩.首先,我们可以看到很多招聘中,会提到有高并发项目者优先.高并发,意味着,你的前雇主,有很大的业务层面的需求, ...

  5. Python-Jenkins API使用 —— 在后端代码中操控Jenkins

    最近在工作中需要用到在后台代码中触发Jenkins任务的构建,于是想到Jenkins是否有一些已经封装好的API类库提供,用于处理跟Jenkins相关的操作.下面就简单介绍下我的发现. Linux C ...

  6. Nhibernate的Session管理

    参考:http://www.cnblogs.com/renrenqq/archive/2006/08/04/467688.html 但这个方法还不能解决Session缓存问题,由于创建Session需 ...

  7. 参考bootstrap中的popover.js的css画消息弹框

    前段时间小颖的大学同学给小颖发了一张截图,图片类似下面这张图: 小颖当时大概的给她说了下,其实小颖也不知道上面那个三角形怎么画嘻嘻,给她说了DOM结构,具体的css让她自己百度,今天小颖自己参考boo ...

  8. java 利用ManagementFactory获取jvm,os的一些信息--转

    原文地址:http://blog.csdn.net/dream_broken/article/details/49759043 想了解下某个Java项目的运行时jvm的情况,可以使用一些监控工具,比如 ...

  9. Android如何制作漂亮的自适布局的键盘

    最近做了个自定义键盘,但面对不同分辨率的机型其中数字键盘不能根据界面大小自已铺满,但又不能每种机型都做一套吧,所以要做成自适应,那这里主讲思路. 这里最上面的titlebar高度固定,下面输入的金额高 ...

  10. 【微信小程序开发】之如何获取免费ssl证书【图文步骤】

    微信小程序要求所有网络请求都走ssl加密,因此我们开发服务端接口需要配置为https 这篇文章介绍一下如何 在 startssl 申请一个免费的ca证书. 1. 打开网站  https://www.s ...