在Mono平臺開發前你應該知道
在Mono平臺開發前應該做的第一個事情就是,調整好心情,降低期望值:
對於Linux本地C程式設計師而言,由於習慣了瘋狂和有魔力的本地C程式設計師開發,因此對於Mono提供的諸多限制可能不太滿意。大體而言,Mono和.Net程式一樣,屬於框架開發的範疇,對於框架開發,最好在框架規定的範圍能工作,否則會陷入孤立無緣的境地。Mono沒有C開發那些唾手可得的工具,也不能對系統進行無限的挖掘,Mono關注的是應用軟體開發,不是系統軟體(Mono 可以支援本地服務開發)。Mono支援兩種型別軟體開發,以WEB為中心的軟體和以本地為中心的開發。WEB包括常規定義上的應用型網站開發,也包括基於服務的模型開發。由於服務現在成為軟體開發的中心並且迅速進化。作為.Net替代平臺,Mono顯得很混亂,主要因為.Net以服務為中心的設計在Mono 上還無法完全施展,因為Mono基礎平臺正處於2.x階段,等09年底應該是一個新階段。對於本地程式開發,主要包括一GTK#和System.Windows為中心的圖形介面程式開發,還包括服務軟體的開發(linux service機構),也包括一Lucene.Net為基礎的搜尋軟體的開發。
對於Windows .Net 程式設計師而言,首先要極度降低期望值,Mono沒有絢麗的工具,缺乏足夠的第三方軟體,並且工具之間的整合也做得不太好,程式碼編寫可能不很流暢,MonoDevelop也可能讓你很失望,這些都是Windows上廉價的.Net開發工具把我們慣壞了。Windows.Net程式設計師來到Mono的主要原因有很多,可能是因為好奇,希望遷移自己的程式,想窺探一下Mono實現以確定和自己想的差距有多遠,更多的是要學習。就像把孩子放到艱苦的地方鍛鍊一樣,來到Mono,你將會有同樣的感覺,非常的貧瘠。Mono工具還比較原始,文件也比較少,我覺得這方倒是學習的好地方,每一次當我開啟MSDN,我都會望書驚歎,多麼希望積累足夠豐富的Windows知識呀,但是MSDN讓人感到很大很茫然,最後,還是購買專著研究更合適,其他要用的,用的時候在查資料吧。在Mono平臺上資料非常少,這也是優勢,對於C#語言本身而言,那是學習的好地方,就像C++一樣,C#本身是一個迷人的語言值得研讀一下,但是C#上緊緊捆綁的應用更適合生產而不是學習,如果要學習,需要找一個單調一點、產品單一的環境,當然學好了趕緊回來,趕緊擁抱Windows:)
瞭解平臺之間的差距:
關於檔案系統,Linux基於虛擬檔案系統,這是Linux最成功的設計之一,表面看起來就是,任何檔案和資源都可以通過一"/"開始的檔案來訪問,檔案之間的分割符是"/"。在Windows中,檔案系統經過多次抽象,看起來類似與以“C:”、“D:”這樣的方式開始,並且檔案之間的分隔符使用"\",這是很多程式不可移植的重要原因,可以參考後來的文章,瞭解如何提高程式的可移植性。
第二個差距就是換行符的不同,在Windows平臺,一個換行符意味著“\r\n",由於在字元終端時代,"\n"的任務是使游標處於下一行的同等位置,而"\r"則是使游標處於一行的開頭,因此,去下一行開始則意味著要配合使用兩個控制符;在Unix族平臺,換行符則使用"\n"表示,這是歷史原因,我猜想是由於早期終端規範導致的。
關於Unicode,這現在應該不成問題了,現在Linux多都在內部使用了Unicode,以前Linux在內部使用ASCII編碼及其擴充套件。由於Windows在內部使用Unicode已經很長時將了,.Net 的Unicode 支援非常好,Char字元本省就是Unicode的,並且System.Text也為文字處理提供了諸多支援。雖然Mono實現了.Net的功能,但是我發現,系統對Unicode 的處理不夠細心,一個細心設計的類庫和平臺,應該保證在大部分情況下系統的反應能和程式設計師預期的一樣好,但是Mono沒有做到,那是以前的事情了,由於Mono RunTime在一直改進,現在應該有大幅進步吧。文字處理一直都是電腦科學的基本問題之一,通常情況下,處理多國編碼的最簡的辦法是使用UTF-8,由於歷史原因,許多介面並沒有使用UTF-8,而是使用蹩腳的轉換。在Windows下,在.Net出現之前,文字處理一直很讓人頭疼,讚揚.Net時常提的一個問題就是:“難道你還想執行字串轉換工作?”,看看char *、wchar_t*、_bstr_t、CComBSTR、CString、basic_string 和System.String,往事不堪回首呀,如果不跨庫,不跨方案,那麼字串處理還算輕鬆,一旦要跨庫跨平臺跨方案,那麼,字串處理就是程式設計師的噩夢。
結構差距,Microsoft.Net 是一個旨在建立巨大生態圈的大方案,希望面面俱到。因為Microsoft企業平臺架構,Microsoft.Net能夠更好的跟Windows的業務核心和系統核心無縫整合,在Microsoft.Net上,架構師、設計師和程式設計師看到的不僅僅是.Net,還包括大量執行的關係業務前途的企業服務和元件。在Mono上,由於需要依賴第三方實現,依賴大量的繫結來使用系統或其他軟體的功能,有時侯透明度不夠。沒有MMC、域、MSMQ、WMI、事務支援、服務架構、資料庫服務等重要基礎結構的支援,這些都是在開發早期就應該確定的因素,請確定Mono能夠滿足你的要求。另一方面,這些在很多時候也是一個優勢,有大量的第三方組建在實現這些功能,包括Apache、Mozilla、Postgrsql等等社團。