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使用相同資料庫驅動器前提下的資料訪問層改造。
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(事實上也無法依賴了),通過一些其他的小技巧來定位以及解決我們的問題。