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