.NET十年回顾
一、???引子
從我還是編程菜鳥時起,.NET就從來沒讓我失望過。總是驚喜不斷。
當(dāng)年我第一個項目是做個進(jìn)銷存。用的Winform。當(dāng)時我是機(jī)電工程師。編程只是業(yè)余心血來潮而已。
.NET的低門檻、VS良好的編程體驗及MSDN完善的說明讓我從此踏上了碼農(nóng)的不歸之路。
回首十年,是從.NET2.0一路走來,記得當(dāng)年靈感之源發(fā)過一篇.NET技術(shù)堆棧大全,
(http://www.cnblogs.com/unruledboy/p/NetStack.html),對照下自己,4.5的很少用到,其他技術(shù)或多或少都有涉及。
?
二、???.NET技術(shù)棧的分析
.NET從第一版發(fā)布至今,也有17年歷史了。能經(jīng)久不衰,肯定有它的特長和亮點。我認(rèn)為它最大的亮點就是生產(chǎn)力。最大的特長是做桌面應(yīng)用。
說通俗點,就是.NET什么都能做,做桌面他最精,出活他最快。
做移動端,.NET也有一席之地,xamarin和Unity。然而競爭對手有JAVA和Obj-C,Swift,H5與之PK。xamarin還嫩了點。
做后臺服務(wù),.NET Core,WCF這些技術(shù)不錯,但服務(wù)器很多是Linux,JAVA先入為主,更有優(yōu)勢。
做網(wǎng)頁,ASP.NET很好。但是競爭對手就更多更強(qiáng)了,JAVA,PHP,js,各種開源解決方案。
在現(xiàn)在流行的NO SQL、AI這些領(lǐng)域,.NET也有一席之地,然而這塊它顯然不是主流。
而在桌面這塊,有WPF,Winform,和他相關(guān)的有WCF,WF,ADO.NET,EF,LINQ。結(jié)合Visual Studio,Ofiice,SQL? Server,競爭對手完全不是一個檔次。
那么,這個技術(shù)棧最適合的領(lǐng)域是哪些呢,我認(rèn)為就是運(yùn)行在Windows系統(tǒng)上的各種程序。
?桌面應(yīng)用要數(shù)據(jù)庫有數(shù)據(jù)庫,要服務(wù)有服務(wù),要控件有控件,要報表有報表(RDLC),簡直是要啥有啥。更不用說還有強(qiáng)大的第三方控件、豐富的開源組件。
如果有人想用JAVA或者其他什么技術(shù)做桌面,我只能說,這很奇葩。除非你對性能要求到苛刻程度。
如果你想做移動端,大數(shù)據(jù),互聯(lián)網(wǎng)什么的,繼續(xù)用.NET沒問題。但是性價比不突出。比如NO SQL這塊的,其他語言擅長就讓它做好了,.NET來調(diào)用就是。田忌賽馬,揚(yáng)長避短。
有人說桌面藥丸,微軟要倒,What?微軟新CEO上臺兩年股票漲了一倍多,現(xiàn)在活得好好的,DELPHI這個沒媽的孩子現(xiàn)在都在茁壯成長,是不是想多了。
又有人拿.NET的性能說事。說什么不如C++云云。這個之前的老趙、xiaotie他們都分析過,按我經(jīng)驗,還沒發(fā)現(xiàn)有什么性能問題。
因為.NET類庫和C#語言都有一個特點,就是給你多種選擇。你想省事偷懶自然可以用現(xiàn)成的。想追求極致,甚至你可以用指針。我也用過指針。
差不了多少的性能,和天壤之別的開發(fā)效率,這個性價比應(yīng)該仔細(xì)考量。
三、???極限壓榨.NET技術(shù)棧的潛能
既然.NET最大亮點是生產(chǎn)力,就結(jié)合我個人的例子來說吧。
當(dāng)初打算設(shè)計組態(tài)軟件。單位不是軟件公司,我的職責(zé)也不是設(shè)計組態(tài)軟件。一開始只是心血來潮。但是面臨一個很大問題。就是我看到的組態(tài)軟件,WINCC,Intouch,都是龐然大物。
如果不是腦子燒掉,不會想著靠一己之力做出來。但是我分析之后,發(fā)現(xiàn)我只需要解決兩個關(guān)鍵問題。一個是組態(tài)設(shè)計器,一個是網(wǎng)關(guān)。
網(wǎng)關(guān)我參考的是OPC規(guī)范。按下不表。組態(tài)設(shè)計器這個,因為我看上了WPF對圖元的表現(xiàn)能力、Blend的零代碼設(shè)計能力。先在網(wǎng)上搜WPF圖形設(shè)計器,找到了這個:
?
感謝周金根提供的這個線索。找到了一套WPF開源的圖形設(shè)計組件: Diagarm Designer。
然而看了代碼體驗了DEMO之后,再比較WINCC等的功能,感覺工作量還是十分巨大。
這時候我想,如果能把這套組件的界面連線功能納入Visual Studio就好了。于是繼續(xù)搜索,發(fā)現(xiàn)了這個:
https://msdn.microsoft.com/zh-cn/subscriptions/bb546938(v=vs.90).aspx
?
?果然微軟沒有讓我失望。于是我只需要專注于如何將我需要的組態(tài)設(shè)計器功能嵌入到Visual Studio神器就可以。
.NET對數(shù)據(jù)庫、文件IO、通訊協(xié)議的完美支持讓我編程省了很多事。加上我之前積累的類庫,進(jìn)展飛快。
這時候碰到一個新問題,就是常規(guī)組態(tài)軟件有一個重要功能:組態(tài)變量。也就比如1號電機(jī)、2號電機(jī)同時運(yùn)行的話顯示綠色,應(yīng)該表示為:Motor1.Running & Motor2.Running。
這要求我的設(shè)計器能夠支持常規(guī)的四則運(yùn)算、邏輯運(yùn)算,也就是支持復(fù)雜的表達(dá)式。
微軟的表達(dá)式樹ExpressionTree?提供了對表達(dá)式完美的封裝。我可以方便的利用它實現(xiàn)我的語法。
我的業(yè)余愛好是研究程序化交易。我選擇了Winform,繪制K線圖我只用了幾百行代碼,就實現(xiàn)了一個可以縮放、拉伸、移動、加入自定義指標(biāo)的K線圖。
為什么這里選用Winform而非WPF?因為WPF優(yōu)勢是界面與代碼分離,利用Blend工具人工繪圖,冗余較多。但做K線圖需要讀入大量數(shù)據(jù),程序生成,使用Winform提供的GDI+ API繪制效率更高。
?
我利用組態(tài)項目的表達(dá)式解析器加以改進(jìn),很快做出來股票預(yù)警器。其他地方也很多參考、借鑒了網(wǎng)關(guān)、組態(tài)設(shè)計器的現(xiàn)成代碼和思路。
現(xiàn)在做成的這個交易系統(tǒng),包括圖形界面、自定義指標(biāo)、各種函數(shù)支持、策略生成器、回測、實盤運(yùn)行,總共代碼也沒有多少,非常簡潔。這要感謝.NET強(qiáng)大的架構(gòu)能力和類庫。
很多人說python做程序化交易首選,比如python的腳本能力和各種圖表繪制能力。但我大C#的強(qiáng)類型編程能力、架構(gòu)能力、各種語法糖,寫策略不是python能比的。至于自定義圖表,別忘了可以導(dǎo)入或者嵌入EXCEL。
一旦你用慣了.NET,有了自己積累的類庫,和長期培養(yǎng)的架構(gòu)理念、抽象能力。你可以在桌面上實現(xiàn)你能想象到的大部分事,讓程序成為你的好幫手。
有人說.NET 不能做大數(shù)據(jù)、不能玩阿爾法狗什么的。拜托。這些東西本來就不是個人、小團(tuán)隊玩的,是國家或者大集團(tuán)才用得上的。別想多了。
作為一個.NET鐵桿粉絲,我只感到慶幸。因為.NET很適合我和我的行業(yè)。兩岸猿聲啼不住,輕舟已過萬重山。
github地址:https://github.com/GavinYellow/SharpSCADA。我的第一個開源項目。為了推廣它,我這國慶節(jié)每天抽出點時間敲鍵盤。歡迎大家多提寶貴意見和建議。
原文地址:http://www.cnblogs.com/evilcat/p/7628041.html
.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關(guān)注
總結(jié)
- 上一篇: jenkins~集群分发功能的具体实现
- 下一篇: .Net 内存对象分析