2016年11月,接受了一個工作,是對“悟空CRM”進(jìn)行一些修補(bǔ)。這是一個不錯的 CRM,開源,并提供一個 SaaS 的服務(wù)。正好微軟的 .NET Core 和 ASP.NET Core 也發(fā)布了。于是就有了這個想法:使用 ASP.NET Core 來開發(fā)一個 CRM。當(dāng)然這里面的私心是:朝后坦白講,悟空CRM 的代碼真的是不怎么樣。大量的代碼堆在 Controller 里,多個功能在一個 EndPoint 里混合。權(quán)限管理也有些亂來。View 里充滿了“臨時解決方案”。所以我真的是一邊改,一邊難受。由于11月我還在做一個 Xarmin 的小程序,所以對 CoreCRM 的開發(fā)就定在12月開始了。
因?yàn)樾薷奈蚩誄RM,本來以為對業(yè)務(wù)的邏輯已經(jīng)比較熟悉,先開始的時候照著悟空CRM的UI直接開始擼就可以了。在嘗試了幾個頁面之后發(fā)現(xiàn)這樣比自己直接寫還麻煩。而在這中間,我的老毛病有犯了:在幾種技術(shù)方案之間不停地權(quán)衡和嘗試。這樣,時間就一天天的浪費(fèi)掉了。技術(shù)方案的選擇經(jīng)歷了:VueJS + jQuery,React.NET,aspnetcore-spa (ReactJS + Redux),最后又回到 VueJS + jQuery。CSS 框架使用的是 Bootstrap 3.3.6,這個是一直沒有變(雖然我也曾經(jīng)想過使用4.0的alpha版,不過最后還是忍住了)。圖標(biāo)使用了font-awesome 4.7.0,也是沒有改。一直折騰了一個月(這中間還有因?yàn)閷?ASP.NET Core 不夠熟悉而付出的學(xué)習(xí)成本),整個12月將要過完的時候,我才只完成了 Layout 和 Login。(其實(shí)原來的首頁、結(jié)構(gòu)架構(gòu)也完成了,但只有UI的部分)。
關(guān)于技術(shù)選擇
為什么要選擇 ASP.NET Core?
我的一個基本判斷是:帶有類型檢查的語言應(yīng)該是未來的趨勢。雖然從歷史角度看,動態(tài)類型和靜態(tài)類型總是交替上臺表演的。不過,隨著程度規(guī)模的不斷變大(想當(dāng)年一個 DOS 程序就幾十,幾百K,求伯君可以使用彙編擼一個 WPS 出來,而現(xiàn)在一個手機(jī) App 也是幾十MB),動態(tài)語言的一些不方便的方面是突顯出來了。特別是多人協(xié)作開發(fā)的時候,因?yàn)闆]有類型的靜態(tài)類型檢查,很多錯誤都只能在運(yùn)行的時候才能發(fā)現(xiàn)。其實(shí)這個問題如果配合上足夠的單元測試,也是可以減輕一些的,然而到了2016年,還是有很多人把測試當(dāng)成負(fù)擔(dān)。結(jié)果就是大量的 bug 和安全漏洞,以及改了補(bǔ)了一個洞,又開了三個洞。
從現(xiàn)實(shí)情況看,PHP 7 已經(jīng)引入了一些類型標(biāo)注,Python 3.5 也有這樣的東西,JS 系里有 TypeScript 這樣的 Transpiler(而且,Angular 2 這樣的框架已經(jīng)開始在使用 TypeScript 進(jìn)行開發(fā)了),以及 Facebook 的 flow。所以,動態(tài)語言在漫漫的靜態(tài)化。雖然只是提供了類型的運(yùn)行前檢查,但也減少了很多運(yùn)行時的問題。
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26