您好,登錄后才能下訂單哦!
小編給大家分享一下使用.NET進行互聯(lián)網(wǎng)開發(fā)的方法,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!
不知從什么時候開始,創(chuàng)業(yè)變得很廉價,談什么都是互聯(lián)網(wǎng),動輒融資千萬。這陣風好像也刮向了程序員中,有那么一大批開發(fā)者,數(shù)據(jù)結(jié)構(gòu)不好好學習、數(shù)據(jù)庫原理不扎實掌握,在github上發(fā)布幾個項目,用nodejs創(chuàng)建一些服務(wù),再用H5寫出APP,就自以為邁入了高級程序員的隊伍,能夠運籌帷幄互聯(lián)網(wǎng)項目,難道學習新技術(shù)、新理念就是快速成長嗎,顯然不完全是,在這浮躁的氛圍中,各種粗制濫造的互聯(lián)網(wǎng)網(wǎng)站、APP接踵而至,很多看似漂亮的APP,連簡單的http接口安全都沒有措施應(yīng)對,很多美麗的響應(yīng)式網(wǎng)站,目錄結(jié)構(gòu)隨意堆疊,這實在是一股歪風邪氣,我覺得程序員還是應(yīng)當踏踏實實的多學理論,多寫代碼,反復實踐。
那么另外一個問題就來了,新技術(shù)、新理念難道就沒有用了嗎,顯然也不是,新技術(shù)新理念是無數(shù)的技術(shù)大牛在長期的實踐中反復重構(gòu)的勝利果實,而作為一個.NET老司機,眼看著這些年微軟擁抱開源,擁抱社區(qū)帶來的改變和進步,也是深感欣慰,于是今天,我想和大家分享一下這些年我以及我的公司對于使用.NET進行Web開發(fā)乃至于互聯(lián)網(wǎng)應(yīng)用開發(fā)的一些經(jīng)驗和技術(shù)總結(jié)。
先看一個最新上線的典型案例,muban.printhelloworld.com,其中用到了諸如HTML5、Bootstrap、EF6 For MySql、阿里云RDS,阿里云CDN等新技術(shù)和新理念,然而卻并沒有脫離采用.NET進行開發(fā)以及采用.NET生態(tài)環(huán)境(IIS、Windows Server)進行部署這一基礎(chǔ),但整個開發(fā)流程,已經(jīng)完全擺脫了WebForm甚至MVC,我們實踐了一套全新的.NET開發(fā)模式,在開發(fā)效率和團隊協(xié)作上大大提升,在開發(fā)時間上也極大地縮短,在這個案例里面,整個網(wǎng)站的前臺和后臺管理,從構(gòu)思到設(shè)計、開發(fā)、調(diào)試、部署,1個人3天完成。下面就開發(fā)模式的細節(jié)詳細描述,也聽取大家的意見,繼續(xù)改進和完善。
對于ASP.NET WebForm的評價,我想以下的話是客觀的:ASP.NET WebForm托拉拽以及事件驅(qū)動的Web開發(fā)模式的創(chuàng)新,雖然方便了一大批.NET入門者的學習和理解,但最終嚴重阻礙了的.NET的普及和商業(yè)化使用,而且在很長一段時間內(nèi),.NET優(yōu)秀的語言特性得不到重視,反而一直被扣著低效率、難擴展、不適合商業(yè)開發(fā)的帽子,ASP.NET WebForm在這其中有著不可推卸的責任。
遙想06、07年的時候,我還在驚嘆于UpdatePanel的強大和方便,現(xiàn)在回想來看,這樣的開發(fā)模式讓開發(fā)人員對HTTP和Web本質(zhì)的認識無疑是罩上了一層迷霧,從長遠看是一種倒退,再往后來,到了ASP.NET MVC時代,微軟高階程序員的陋習依舊沒有改善,雖然MVC開源了,但仍然充斥著各種自以為是的為開發(fā)人員提前想好的特性、綁定、快捷方法等等,這些東西初級開發(fā)人員可能會覺得很方便,但我想,任何從事過商業(yè)項目架構(gòu)和開發(fā)的技術(shù)經(jīng)理都會深有感觸,在真正需要穩(wěn)定的扎實項目中,這些小聰明,不僅毫無用處,而且難以擴展,更容易導致難以掌控的Bug和漏洞。
令人慶幸的是,在Nadella的帶領(lǐng)下,在比爾蓋茨重新?lián)渭夹g(shù)顧問的指引下,.NET不斷修正方向,除了在語言上大步向前,更在生態(tài)建設(shè)上愈加清晰可見。我一直在懷疑公司所創(chuàng)造的.NET敏捷開發(fā)模式是否是先進性的體現(xiàn),直到vNext(MVC6.0)的出現(xiàn),我豁然開朗,原來殊途同歸,微軟終于走對路了。
在談開發(fā)模式之前,我想先談一談:
一、目前的互聯(lián)網(wǎng)項目或者是傳統(tǒng)Web項目的一些新趨勢和特點
1、不再使用WebService,而是大量使用HTTP作為數(shù)據(jù)通訊的方式
2、數(shù)據(jù)載體不再使用XML,轉(zhuǎn)而使用JSON
3、Web前端會使用Bootstrap、JQueryUI、EasyUI等第三方HTML5框架
4、有APP的需求,甚至APP優(yōu)先的需求,APP需要對接各類第三方插件
5、為了追求APP快速上線,有時候會采用HTML5的APP開發(fā)模式,例如PhoneGap、AppCan、HBuilder等
6、 有微信的需求,要求對接微信公眾賬號,進行微信瀏覽器中的移動Web開發(fā)
7、開發(fā)周期短、迭代頻繁
8、數(shù)據(jù)量增長迅速,對報表展示、數(shù)據(jù)分析有較多的需求
9、項目組人員需求由Web開發(fā)工程師,細分為HTML5前端工程師、JAVA(.NET)工程師、數(shù)據(jù)庫工程師等
10、單元測試減少,功能測試越來越多,甚至用互聯(lián)網(wǎng)工具(worktile等)替代專業(yè)測試工具
基于以上情況,我們考慮,如果仍然使用.NET進行系統(tǒng)開發(fā),那么在用戶量<=50萬的敏捷項目里:
二、一些傳統(tǒng)的.NET Web開發(fā)模式和方法就應(yīng)該被拋棄
1、ASP.NET WebForm以及MVC模式不再合適,他們均存在前后端耦合嚴重,簡單流程復雜化的問題,而且前端始終無法脫離.NET架構(gòu)。
2、SQL Server數(shù)據(jù)庫不再合適,雖然SQL Server 2014的特性讓人激動,但隨著公有云的使用越來越普遍,同時相比其他數(shù)據(jù)庫來說,大小、價格、可擴展性甚至性能方面,SQL Server都顯劣勢。
3、傳統(tǒng)三層架構(gòu)不再合適,很多互聯(lián)網(wǎng)項目,從設(shè)計之初就要求能夠支持多服務(wù)節(jié)點,不同應(yīng)用場景使用不同數(shù)據(jù)庫。再加上三層架構(gòu)大量使用反射犧牲性能增加代碼,也不再適合敏捷開發(fā)。
4、Server 2003的IT架構(gòu)應(yīng)當被拋棄,無論是IIS6.0落后于IIS7的HTTP請求處理模型,還是Server 2003落后于Server 2008、2012的穩(wěn)定和擴展,都不應(yīng)當再考慮基于Server 2003和IIS6的.NET部署。
雖然被拋棄了一些東西,但微軟畢竟是微軟:
三、一些.NET特性應(yīng)當被強化
1、深入使用Visual Studio 2015開發(fā)工具,VS2015是宇宙級開發(fā)工具無需多說,甚至在前端編碼(CSS、JS、HTML)上也愈加純熟,配合適合工程師自己的自定義設(shè)置以及第三方插件,將會如虎添翼
2、TFS源代碼管理的使用,無論是內(nèi)部安裝TFS Express版本還是在tfs.visualstudio.com上申請免費空間,都能夠很好的進行團隊協(xié)作,以我們實踐來看,切勿被Git模式?jīng)_昏頭腦,事實上TFS管理模式才是最適合.NET開發(fā)的
3、.NET高階語言特性應(yīng)當加強使用,在理解的基礎(chǔ)上,如果能熟練使用Linq、Lamda表達式、反射、Task并行編程等.NET特有的優(yōu)質(zhì)語言特性和方法,將會極大地提升開發(fā)效率,縮短開發(fā)時間。
4、IIS的高級功能和動態(tài)管理應(yīng)當加強使用,IIS7以后,IIS服務(wù)器就是高性能Web中間件的代名詞,加上Server 2008、2012的Core模式,加強對IIS的動態(tài)管理和配置能夠極大地提升Web處理效率。
5、Server 2012 R2操作系統(tǒng)應(yīng)該加強使用,雖然跨平臺是.NET的方向,也在mono上實踐的很好,但在PC服務(wù)器和云服務(wù)器越來越便宜的今天,還是多用用Windows最新的服務(wù)器操作系統(tǒng)吧。
有了以上這些認識,經(jīng)過總結(jié),我們現(xiàn)行的.NET開發(fā)模式,可以簡單概括為如下:
一、前后端高度解耦
首先要做的就是徹底拋棄ASP.NET WebForm和MVC模型,前后端高度解耦,前端的所有邏輯處理均使用JS進行處理,包括Dom元素布局與繪制以及數(shù)據(jù)請求,而后端為純粹的業(yè)務(wù)邏輯處理,包括邏輯處理以及數(shù)據(jù)處理。目前我們的項目由于使用了ASP.NET中的Routing特性,依然Host在ASP.NET模型以及IIS中,在理論中以及不久的將來,替換為Core IIS或者Linux下的Nginx來Host純HTML5以及HTMl5緩存也將非常容易。
二、前端使用純HTML5
前端拋棄傳統(tǒng)HTML,盡量全部使用HTML5技術(shù),其中做出的犧牲有,拋棄IE11以下的瀏覽器,但在互聯(lián)網(wǎng)思維的今天,這樣的思路也未嘗不可,當在前端全部使用HTML5技術(shù)后, 文件、圖形圖像、音頻視頻、地理位置等各種處理將變得非常簡單,而且扁平化、數(shù)據(jù)化。
三、前端充分利用成熟框架
使用新的開發(fā)模式后,很明顯的一個改變就是,公司的美工不再或者很少進行前端切圖,而對于技術(shù)美工的需求(會CSS開發(fā)和JS開發(fā)、也懂設(shè)計)則日漸增加,帶來這一改變的根源就是那些不斷涌現(xiàn)先進的、優(yōu)秀的前端框架,我們目前正在使用的有JQuery、Zepto、JQueryUI、JQueryMobile、Bootstrap、Amaze UI、inoic、Framework7、SUI、MUI等等,以及伴隨著這些優(yōu)秀框架的第三方插件??陀^的說,通過優(yōu)秀框架的使用,不僅沒有增加前端的系統(tǒng)風險,反而由于框架的開源、架構(gòu)清晰、穩(wěn)定等特性,實現(xiàn)了更加穩(wěn)定、可擴展的前端。簡單的舉個例子,在解決困擾很多Web工程師的全兼容性的布局以及響應(yīng)式布局問題上,Bootstrap就功不可沒。
四、前端開發(fā)面向?qū)ο蠡?/strong>
將前端開發(fā),通過JS面向?qū)ο筇匦赃M行簡單封裝,在Dom元素操作以及業(yè)務(wù)邏輯數(shù)據(jù)請求的處理上,與后端數(shù)據(jù)類型、實體結(jié)構(gòu)以及處理邏輯上保持一致,不僅拉近了前后端開發(fā)人員之間對業(yè)務(wù)需求的理解,也是極大地降低的技術(shù)培訓的門檻,提升了團隊合作的效率。
五、使用CDN服務(wù)
CDN服務(wù)在幾年前還是大企業(yè)、大公司的專屬,現(xiàn)在已經(jīng)完全普及化、平民化,Web前端越來越重是不爭的事實,但真正的業(yè)務(wù)邏輯往往只有幾十K甚至幾K,1個幾百K的頁面,90%是JQuery等第三方框架,因此,合理的使用CDN加速,不僅提升用戶端的體驗,更直接將基于HTTP架構(gòu)Web服務(wù)的負載能力提升5-10倍以上。
六、業(yè)務(wù)邏輯HTTP服務(wù)化
這句話的描述可能不是很恰當,但這也是我們?nèi)碌?NET開發(fā)模式中最重要的環(huán)節(jié),經(jīng)過對阿里開放平臺等先進互聯(lián)網(wǎng)架構(gòu)的學習,最終我們形成了結(jié)構(gòu)化但松散的業(yè)務(wù)邏處理模式,即每一個業(yè)務(wù)邏輯行為均有1個唯一的路由名稱,業(yè)務(wù)邏輯只對路由名稱負責,而路由名稱對流向、性能、權(quán)限、安全等上層需求負責。這樣做的好處是,能夠充分利用3-5年左右經(jīng)驗的開發(fā)人員(這也是大部分公司的開發(fā)主力軍),讓他們專注于業(yè)務(wù)邏輯的編寫,而業(yè)務(wù)邏輯之外的事情,在架構(gòu)層面由其余的控制器去解決,而一個大的.NET項目工程,也可以靈活以不同的方式拆分為各個子模塊。對于HTTP服務(wù)的實現(xiàn),我們嘗試過ASP.NET ASHX處理器、Windows Service HOST WCF服務(wù)、ASP.NET Web API,當前較為穩(wěn)定版本是Web API,當然針對HTTP服務(wù)化這一需求,Wen API也顯略重,以后會繼續(xù)改進??傊@一改變過程,在實踐中提升了至少3倍以上的開發(fā)效率和測試效率。在后一章節(jié)中,將會進行詳述。
七、分布式與熱加載HTTP服務(wù)建設(shè)
互聯(lián)網(wǎng)應(yīng)用要求的是敏捷開發(fā)和反復迭代,同一個邏輯架構(gòu)下的不同請求會使用不同的服務(wù)器和數(shù)據(jù)庫已經(jīng)是家常便飯的事情,因此項目設(shè)計初期,分布式HTTP服務(wù)的建設(shè)至關(guān)重要,而業(yè)務(wù)更新更是需要能夠進行熱加載,在.NET體系里面,就是DLL托管代碼的動態(tài)加載使用,可惜的是,由于公司現(xiàn)有項目并未出現(xiàn)大規(guī)模分布式場景,因此還未研發(fā)出較為穩(wěn)定的DLL動態(tài)加載架構(gòu),在后一章節(jié)中,將會詳細討論。
八、使用阿里云解決大數(shù)據(jù)問題
我想任何一個使用過阿里云以及其他云服務(wù)的IT架構(gòu)師,都能深深的感覺到,阿里云已經(jīng)領(lǐng)先其他云不止一個身位。事實上,特別是阿里云的數(shù)據(jù)庫相關(guān)功能,例如RDS、DRDS、KVStore等,都已經(jīng)在實踐環(huán)節(jié)真實的解決了很多傳統(tǒng)需求里的復雜點和困難點,具體細節(jié)后面詳細討論,但真心的說一句,趕快使用阿里云吧,至少在現(xiàn)階段,不是阿里云在綁架你,而是在幫助你。
今天寫了很多,總的來說,就是告訴大家,.NET的春天已經(jīng)來了,.NET不僅可以進行互聯(lián)網(wǎng)化的敏捷開發(fā),更能處理大型項目大型數(shù)據(jù)大型邏輯,這一點我在實踐中已經(jīng)嘗到甜頭,而作為一個寫Pascal數(shù)據(jù)結(jié)構(gòu)出身的程序員,也至今十五年有余,我也對各類新技術(shù)非常感興趣,都有涉獵甚至嘗試,不怕被別的語言噴,我甚至可以大膽的說一句,其他語言,從綜合(語言、開發(fā)環(huán)境、開發(fā)效率、技術(shù)社區(qū)、團隊協(xié)作、應(yīng)用能力)上來看,在應(yīng)用級開發(fā)領(lǐng)域,已經(jīng)落后.NET太多太多,只是.NET程序員自己還沒察覺,所以從這一點上來看,需要大家的共同努力,不斷鉆研和探索。
看完了這篇文章,相信你對使用.NET進行互聯(lián)網(wǎng)開發(fā)的方法有了一定的了解,想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。