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