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权限管理系统实战-三 ...
随机推荐
- ASP.NET Aries 入门开发教程2:配置出一个简单的列表页面
前言: 朋友们都期待我稳定地工作,但创业公司若要躺下,也非意念可控. 若人生注定了风雨飘摇,那就雨中前行了. 最机开始看聊新的工作机会,欢迎推荐,创业公司也可! 同时,趁着自由时间,抓紧把这系列教程给 ...
- Ubuntu 14.04中Elasticsearch集群配置
Ubuntu 14.04中Elasticsearch集群配置 前言:本文可用于elasticsearch集群搭建参考.细分为elasticsearch.yml配置和系统配置 达到的目的:各台机器配置成 ...
- 算法与数据结构(十三) 冒泡排序、插入排序、希尔排序、选择排序(Swift3.0版)
本篇博客中的代码实现依然采用Swift3.0来实现.在前几篇博客连续的介绍了关于查找的相关内容, 大约包括线性数据结构的顺序查找.折半查找.插值查找.Fibonacci查找,还包括数结构的二叉排序树以 ...
- 程序猿都没对象,JS竟然有对象?
现在做项目基本是套用框架,不论是网上的前端还是后端框架,也会寻找一些封装好的插件拿来即用,但还是希望拿来时最好自己过后再回过头了解里面的原理,学习里面优秀的东西,不论代码封装性,还是小到命名. 好吧, ...
- nodejs利用ajax实现网页无刷新上传图片
nodejs利用ajax实现网页无刷新上传图片 标签(空格分隔): nodejs 通常情况下上传图片是要通过提交form表单来实现的,但是这又不可避免的产生了网页转. 利用ajax技术和FormDat ...
- CSS知识总结(七)
CSS常用样式 5.背景样式 1)背景颜色 background-color : transparent | color 常用值:①英文单词,②十六进制,③RGB或RGBA 另外,还有一种是 渐变色彩 ...
- C#发送邮箱
之前自己从来没有做过发送邮箱的功能,前段时间项目需要,在找了很多帖子之后,终于实现了. 之后有整理了一下,写了一个类.直接给类传递信息,就可以发送了. 这里还需要说明的是,发送邮箱需要开通POP3/S ...
- BlockingCollection使用
BlockingCollection是一个线程安全的生产者-消费者集合. 代码 public class BlockingTest { BlockingCollection<int> bc ...
- 自定义控件之 圆形 / 圆角 ImageView
一.问题在哪里? 问题来源于app开发中一个很常见的场景——用户头像要展示成圆的: 二.怎么搞? 机智的我,第一想法就是,切一张中间圆形透明.四周与底色相同.尺寸与头像相同的蒙板图片,盖在 ...
- 【腾讯Bugly干货分享】Android动态布局入门及NinePatchChunk解密
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57c7ff5d53bbcffd68c64411 作者:黄进——QQ音乐团队 摆脱 ...