1. 程式人生 > >基於.Net進行前端開發的技術棧發展路線(一)

基於.Net進行前端開發的技術棧發展路線(一)

前言

 

今天想講講的是我的技術樹。我最初是做CS開發的,第一階段的技術經歷是以Powerbuilder來做CS開發,第二階段開始基於C#做winform開發,眼看前端開發越來越流行,需要更廣泛的技術棧勢在必行。因此以.Net為基礎,我開始拓展自己的技術棧。從14年到18年,跨越了很多界限,到現在為止,應該說.Net,Java,Android,基於nodejs的web開發都積累了一些經驗,可以給大家分享一下。

 

01

我的技能樹

 

我對技能的培養,是很有目的性的。我在開啟我的第二階段技能增長的時候,就預先對自己未來的技術樹發展進行了選擇。因此當時就畫了思維導圖並逐漸補充和調整。現在我就將我的“技能樹”思維導圖跟大家分享。

 

其中,標註為黃色旗幟的是基本掌握,標註為紅色旗幟的為使用熟練。未標註的只是瞭解。

 

首先提一下我的技能樹的底色。從我進入IT行業開始,一直從事的是企業資訊化系統的開發,所以在技術樹裡,還看不到演算法、叢集、微服務這類技能,這還不在我的技能需求列表內。我的技能覆蓋範圍是:如何做好一個企業資訊化系統。但我未來對這些還是很有興趣並會進行研究。

 

史前技能:

作為IT行業的老爺爺,我還有前一段的技術經歷,是使用PowerBuilder+Sybase資料庫進行CS應用開發。我剛進入IT行業的時候,PowerBuilder還是非常火的,那時候有兩火,PowerBuilder和Delphi。那時候也剛好是網際網路時代剛開啟的時候,所以幾年之後,技能便逐漸過時,我從程式設計師到部門經理,感覺技能無法進步,最後我轉行做了產品經理。

 

在幾年前,經過n年的折騰產品,我發現搞技術也挺適合我的,我又回頭拿起了技術。一手產品,一手技術,都是我喜歡的事情,因此我想如何能儘快的精進技術,我的技能樹思維導圖就是那時候誕生的。

 

首先開刀的就是C#。為什麼要選擇C#這個看起來似乎有點“沒落”的技術呢?這裡我得感嘆,公司對個人的發展影響重大,一個人的一生,隱約的都在循著某條路線前進,最終形成了你獨特的個人人生。你就職的公司是你人生軌跡的重要部分。我在之前的公司擔任產品職位,因為做的是和RFID硬體相關的行業,因此選擇了C#。在產品研發過程中,逐漸瞭解C#。之後我進入了一家外貿電商企業,負責企業ERP的研發,因為對操作便捷性的極致追求,仍然採用了C#基於Winform進行開發,這也使得我更深入的介入到研發中去。在這期間,為了攻克技術難題,優化系統架構,提高部門開發效率,我花了大半年的業餘時間,把《C#高階程式設計》啃下來了,至今仍反覆閱讀,從此也真正的重新進入了程式設計師的行列。

 

但從0開始何其之難,因為基礎太低。為了儘快的達成目標,我採用了“跳遠”式的學習模式,這種模式現在仍然採用,那就是學習的新技術要和上一個技術要有相當程度的升級,儘量避免同級別技術都去學習,且要不斷的學習技術和拋棄技術。技術要跳躍式升級是因為學習時間有限,而為什麼要學習技術又要拋棄?這是多餘麼?我認為並不多餘,我非常認同一句話:“人生中你所走的每一步,都是構成你人生的基石”,技術大廈的基石,一定是要牢固的,沒有紮實的技術基礎,就去學新技術,必然走火入魔(產生大量的認知錯誤)。這也是為什麼我看《C#高階程式設計》的版本是第四版,而不是第六版,因為第四版基於.Net2.0,那是一個技術基石,我未來可以不用,但不能不學。

 

因為公司的產品是基於C#和WinForm,因此我首先學精的就是它們了。

 

02

C#相關技術

C#:必須

C#本身就不用說了,需要深度學習。

Linq:必須

Linq是個好東西,我覺得如果C#沒有Linq,那可能就索然無味了。使用Linq可以大大的精簡程式碼。而Linq的技術鏈其實很長,它是從委託、匿名委託、lamda表示式、表示式樹,最後才有Linq。

DI/IOC/AOP:值得了解

我覺得深入理解這些概念,對程式設計師來說很重要。這可以讓我們把架構做的非常優化,也有利於我們更好的理解asp.net mvc。

其中微軟企業庫EntLib我是詳細瞭解過的,受益匪淺,但實際工作中沒有用到,因為技術已經過時了。而對於MEF和Spring.Net有興趣,但沒時間去了解。

Membership:值得研究

對於網站的許可權控制,不管是webform還是mvc,微軟都提供了自己的解決方案,但在實際使用中,企業的需求各異,一般大家都是自己實現,不會用Membership。但瞭解它,從而瞭解微軟的網站許可權設計原理,從而定製自己的許可權控制架構,是很有幫助的。

正則表示式:值得研究

我覺得這東西非常有用,但表示式太難記,又用的少。所以到現在為止,還只停留在碰到問題就百度的業餘水平。

EmitMapper:必用

在.Net2.0時代,大家大量用DataTable,但它五年前甚至更早就應該被拋棄了,List物件使用起來非常方便,而對映工具使得將前端的資料對映到後端變得非常方便,使用強型別程式設計變得非常有優勢,DataTable應該走入歷史了。除了EmitMapper,也有人用其他的比如AutoMapper等,都可以。

Log4Net:必用

對於一個完整的應用系統,怎麼能沒有日誌記錄系統?Log4Net已經非常強大,沒有必要自己去寫一個。

Asp.Net WebForm:未來會繼續研究

我算是大致研究過WebForm,雖然沒有用於實用,但我始終保持一種想把它實用,並進一步深入瞭解它的興趣。肯定有人會覺得,WebForm已經過時了,為什麼還要研究它?因為要打好技術大廈的基礎,WebForm可以說是一個非常經典的設計,雖然已經過時,但拿來把玩也是很好的。

Asp.Net Mvc:正在使用

當前我的產品裡,在後端使用的就是Mvc。但我所使用的Mvc遠遠不是asp.net mvc。因為實際上只用了其中很少的一部分,而完全拋棄了Razor。因為Razor也過時了,現在流行的是前端開發,後端只要簡簡單單,就好。

.Net Core:未來應該會使用

當前產品還不需要跨平臺,但我感覺未來可能會需要跨平臺。

CodeSmith:在用

為什麼會使用CodeSmith?這是歷史遺留問題,因為當初公司使用的架構,是部落格園上的一篇文章推薦的基於Repository的經典架構,那個架構下需要生成大量的類,Model,ViewModel,Access,Service等,所以需要程式碼生成工具,就用上了CodeSmith。

但隨著我後來徹底拋棄了Repository架構,架構越來越簡單,CodeSmith也用的越來越少,現在只用於生成ViewModel類。其實就生成VM這種簡單的POCO類,用C#直接寫一個就行了,但用習慣了CodeSmith不用白不用吧。

 

不知不覺已經寫了5頁了,今天就到此為止,下一次繼續寫完我的技能樹。

 

覺得文章有意義的話,請動動手指,分享給朋友一起來共同學習進步。

歡迎關注本人微信公眾號,更及時的關注最新文章(每週三篇原創文章,以及多篇專題文章):