2014新年了,順手寫的一點文字,主要談談我對當前微軟ASP.NET技術的見解,比較隨意,大夥兒隨便看看吧。javascript
從2002年發佈.NET 1.0和Visual Studio.NET,到2013年.NET 4.5.1和Visual Studio 2013發佈時,微軟.NET平臺己有11年的歷史,其Web技術幾經變遷,當前演化爲如下的主要技術子領域:html
一張圖瞭解微軟Web平臺技術全貌前端
時至今日, ASP.NET底層的基礎架構基本沒太大變化,諸如使用HTTP處理管線處理HTTP請求,使用HTTP Module對原始HTTP請求進行「加工「,使用HTTP Handler生成發給瀏覽器的HTML代碼等核心運做機理也沒有變化,全部變化的都是上層技術。java
下面就簡要地聊聊當前ASP.NET技術家族的各項成員:程序員
這裏談到PHP,說些題外話:諸如PHP、JSP之類微軟以外的其餘Web開發技術,與ASP.NET其實有諸多重合之處,每種編程技術都有多種框架可選。你能夠先學PHP/JSP,再學ASP.NET,或者反之。不過我我的感受,若是先學ASP.NET再學其餘技術,開始會略感不適,由於原來不少你己經習慣的「自動化」的東西,在許多其餘技術中必須由程序員手動實現,是謂「由奢入簡難」。但畢竟都是Web應用,仍是有不少都是同樣或相似的東西,轉型並不困難。數據庫
在現有的ASP.NET技術家族成員中,Web Forms是「元老」,MVC是「新貴」,二者都是微軟Web技術中最引人注目的焦點,下面就專門地聊聊它們。編程
Web Forms是老傢伙了,在MVC出現以前,它是微軟Web技術領域內當之無愧的「一把手」(實際上是由於沒得選,它是惟一候選人),有大量的Web項目使用它開發,其中許多項目一直跑到今天,並且看起來還會繼續跑下去,到底要跑多久,誰也不知道。由於在實踐中,你們都有意無心地遵循這樣一個原則:瀏覽器
If it’s not broken, don’t fix it.網絡
這就是說,對於老的使用Web Forms開發的項目,若是它還運轉正常,就不要去動它。可是,若是要開發新項目,就須要仔細考慮是否仍然採用這種擁有十多年曆史的「老」技術了。架構
John Ciliberti在其《ASP.NETMVC 4 Recipes》一書中對Web Forms的優缺點做了比較全面的總結,原文內容很多,我粗略地轉述以下(同時加上了一些我的觀點):
1、引誘程序員寫出「把全部東西混雜在一塊兒」的Web應用。
Web Form採用Code-behind方式,雖然分離了頁面模板代碼和後臺的C#代碼,但實際上有不少程序員在後臺C#代碼中書寫大量的業務邏輯代碼,而且把這些代碼與頁面上的控件直接綁定(由於在高度智能化的Visual Studio中,這麼幹太容易了),這會給網站的長期維護帶來麻煩。另外,若是不是在一開始就在架構上有所考慮,幾乎沒有辦法對一個Web Forms項目進行單元測試。
2、成也控件,敗也控件。
Web Forms開發中,控件是頁面開發的核心。Web Forms服務端控件是重量級的控件,它擁有本身的一套運做機理,好比控件有本身的生存週期,在不一樣的週期觸發不一樣的事件;Web Forms提供了很多數據驗證控件,雖然能完成大多數常見的數據驗證任務,但其可擴展性和性能比不上如今使用的諸多JavaScript庫(好比jQuery Valiation,不依賴於服務端生成的ViewState,運行速度更快,使用方便靈活)。
之類的「神奇代碼」,並且只要你往頁面上加了一個控件,它們就會不請自來。對於這些代碼,你只能祈禱它工做正常,一旦出了問題,跟蹤至關困難。
總而言之,Web Forms控件高度封裝的特性使用開發者調整它所生成代碼的手段不多頗有限,這限制了開發者的自由和發揮餘地,也給頁面優化帶來困難。
3、 下面重點說說WebForm的另外一個問題——過分封裝
最初WebForm的設計思想是模仿VB的開發方式,用拖放控件的方式設計Web頁面。但Web應用與桌面應用畢竟有重大差別,強求統一,必然須要對Web應用的底層機理進行深度地封裝,方纔可能創造出與桌面應用開發一致的開發體驗。Web Forms的封裝甚至到了這種程度:你不須要了解HTTP協議,也能經過拖拖拽拽的方式構建Web應用。
這樣一來,基於WebForms開發簡單是簡單了,但遠離了Web應用的本質,Web Forms框架完成了太多的事,你必須照着它規定的套路來,留給你自由發揮的餘地很少了。同時,因爲WebForms把HTTP協議給包得幾乎」看不到了」,製造了一個「Web網站開發並不複雜,就是這樣「的第一印象,這實際上是一個」假像「,若是不能意識到它點,僅會用Web Forms的Web開發者,離開了Visaul Studio,幾乎沒法在其餘Web領域找到工做,由於你己「認假成真」被「洗腦「,必須」清空內存「,從新學習與瞭解Web應用的」真像「。
相比WebForms,ASP.NET MVC要好得多了,它並未向使用者隱藏Web應用的本質,雖然學習曲線比較陡,涉及到技術和Web開發相關背景知識比較多,但能玩轉它的人,其學習能力和平均開發水平每每都還不錯。
最後說說微軟技術特色對程序員生涯和技術發展所帶來的一些影響:
微軟技術的最大特色之一就是」易用「和」開發高效「,這是優勢,但對於程序員而言,若是對此沒有清晰的認識,則會受到不利的影響。
微軟技術爲了易用,包了不少層,而且許多並不開源。當你嘗試去探索其底層技術實現時,會困難重重。
另外一方面,因爲程序員自身開發經驗與能力的限制,過分的封裝也阻止了程序員對深度探索技術內幕的熱情。
與Windows相比,Linux不易用;與C#相比,Java不易用,C++尤爲不易用;與Web Forms相比,JSP和PHP都不易用,……,但這些不易用,卻迫使程序員去學習不少東西,調動了其積極性,程序員們收穫到了自身能力與素質的提升。
人的天性是懶的,易用、開發高效且高度封裝的許多微軟技術,嚴重削弱了不少程序員的技術探索慾望。因此我看到,在微軟技術領域,只有那些意志堅決而且對技術自己有着濃厚興趣的人,才能堅持這條深刻探索技術之路,並在這一技術探索過程當中收益良多。而這樣的人,在微軟領域以外,也會是一把好手。
固然,針對微軟技術「催生懶漢「這種現象,板子不能打在微軟技術身上,而應該打在人身上,這是人自己的問題,技術自己是中性的,是「無辜」的。
須要指出的是,微軟技術走向開放的趨勢日益明顯,當前重量級的一些技術,好比ASP.NET MVC、Entity Framework等,都是開放源代碼的,有時間讀讀這些項目的源碼,定有所得。
最後談一點,因爲學習掌握某個技術會耗費程序員大量的時間、精力甚至金錢,沒有人但願本身下大功夫掌握的技術沒有用武之地,所以,門戶之見至關突出。常常會看到許多程序員會爲各類技術的所謂「優劣」爭得面紅耳赤,惱羞成怒者甚至開始對對方進行人身攻擊,在網上,「黑「微軟技術者尤爲常見。
其實,應該「把技術當成工具,但不要成爲宗教信仰」。
我贊同「實用主義」原則,別浪費時間去爭論哪一個技術好、哪一個技術壞,而應該關注的是哪一個技術最適合於解決哪類問題。在不一樣的場景選擇合適的技術,別試圖用一種技術去包打天下,「多學幾手,腳踏兩隻船」。
固然,想「腳踏兩隻船」,這要求程序員要有足夠的學習能力和紮實的計算機專業基礎知識和基本技能,並且「船不少」,人卻只有兩隻腳,加上人的時間精力也是有限的,因此要針對衆多的「引人」的技術勇敢地說「不」。有所不爲纔能有所爲,追求「一專多能」,努力精通一項技術,對其餘的技術作到須要時能快速上手並對付工做任務便可。學習能力再強,也不要期望能「快速」地成爲另外一領域內的」高手「,這既不可能也無必要。在實際開發中,也許你不精通某項須要用到的技術,但必定有人精通這個技術,你們相互合做,取長補短就行了,共贏!