.Net Core应用框架Util介绍(二)
Util的開(kāi)源地址
https://github.com/dotnetcore/util
?
Util的開(kāi)源協(xié)議
Util以MIT協(xié)議開(kāi)源,這是目前最寬松的開(kāi)源協(xié)議,你不僅可以用于商業(yè)項(xiàng)目,還能把Util的代碼放進(jìn)你的框架,放心使用。
?
Util的命名
Util這個(gè)名字看上去不怎么高大上,很多人勸我換個(gè)霸氣點(diǎn)的,比如USharp。
不過(guò)我還是堅(jiān)持使用Util,因?yàn)樗?jiǎn)短,也更好記憶,Util很多類(lèi)名與.Net或第三方類(lèi)庫(kù)重名,需要使用完全限定名來(lái)調(diào)用它,比如Util.Helpers.String.Join()。
另一個(gè)經(jīng)常被提到的問(wèn)題是Util是一個(gè)常用詞匯,容易與其它類(lèi)庫(kù)產(chǎn)生沖突,不過(guò)Util的定位是為小團(tuán)隊(duì)提供幫助,一般情況下,這不會(huì)產(chǎn)生問(wèn)題,另外Util會(huì)封裝大量常用類(lèi)庫(kù),沖突會(huì)在Util內(nèi)部處理。在極端的情況下,你還能使用using創(chuàng)建別名來(lái)自己解決。
?
Util的使用方法
Util尚未成熟,所以我還沒(méi)有發(fā)布正式版,Nuget發(fā)布的是預(yù)覽版,如果你想通過(guò)Nuget引用,請(qǐng)勾選“包括預(yù)發(fā)行版”。
尚未成熟并不表示Util Bug很多,還無(wú)法使用,只是還沒(méi)達(dá)到我心目中理想的那個(gè)樣子。對(duì)于中小項(xiàng)目,很多常用功能都已經(jīng)封裝,最新版本的Util已經(jīng)在我的項(xiàng)目上使用,已知問(wèn)題已全部修復(fù)。
被問(wèn)得最多的問(wèn)題是Util有文檔嗎,抱歉,還真沒(méi)有。我的打算是待Util成熟后,再建立完整文檔,并創(chuàng)建一個(gè)官網(wǎng)。
當(dāng)然,我希望有更多人能參與進(jìn)來(lái)一起分享技術(shù),一個(gè)人精力和能力都是有限的,進(jìn)度會(huì)非常緩慢。
由于目前沒(méi)有文檔,你只能通過(guò)查看源碼進(jìn)行學(xué)習(xí),這有點(diǎn)痛苦,不過(guò)也能讓你基礎(chǔ)打得更扎實(shí)一點(diǎn)。
你如果對(duì)Util及Util引入的相關(guān)技術(shù)還不太了解,那么不應(yīng)該將它應(yīng)用在一個(gè)非常緊急的項(xiàng)目上,這會(huì)導(dǎo)致風(fēng)險(xiǎn)。
Util主要是我用來(lái)滿(mǎn)足自己項(xiàng)目的產(chǎn)物,所以它可能不能完全滿(mǎn)足你的需求,作為項(xiàng)目負(fù)責(zé)人,你必須有能力擴(kuò)展它。
學(xué)習(xí)Util的起點(diǎn)是提供的Demo,我演示了CRUD的基本用法,不過(guò)這個(gè)Demo是用Angular開(kāi)發(fā)的,環(huán)境上有點(diǎn)折騰,后續(xù)我會(huì)再提供一個(gè)Asp.Net Core Mvc基于JQuery的示例。
這個(gè)Angular Demo不僅演示了服務(wù)端CRUD的封裝,同時(shí)也演示了TagHelper是如何與Angular配合起來(lái)讓UI變得清晰省力。
當(dāng)你把這個(gè)Demo運(yùn)行起來(lái),就可以通過(guò)查看源碼的方式了解它的運(yùn)行機(jī)制,基本了解清楚后,再自己做幾個(gè)復(fù)雜點(diǎn)的Demo來(lái)練手,有把握再運(yùn)用到你的項(xiàng)目上。
如果你在使用中發(fā)現(xiàn)Bug,請(qǐng)不要親自動(dòng)手,你應(yīng)該到Github提交Issue,或直接到群里來(lái)找我,我會(huì)以迅雷不及掩耳之勢(shì)搞定它。
如果你希望我為你擴(kuò)展某些功能,也可以提Issue,不過(guò)我會(huì)評(píng)估是否具有價(jià)值,冷門(mén)需求只能靠你自己完成。
如果你喜歡折騰,推薦你創(chuàng)建自己的應(yīng)用框架,將Util以及其它框架的源碼慢慢吸收到你的框架中,這能讓你最大限度的了解框架內(nèi)部實(shí)現(xiàn)機(jī)制,并能大幅增強(qiáng)你的編碼和設(shè)計(jì)能力。?
對(duì)于完全不能或完全不想折騰的朋友,建議你關(guān)掉網(wǎng)頁(yè),好好享受生活,因?yàn)樾碌募夹g(shù),特別是前端技術(shù)真的很折騰。?
如果你有新項(xiàng)目,希望采用.Net Core開(kāi)發(fā),Util將是一個(gè)很好的起點(diǎn),他將為你節(jié)省大把的時(shí)間,我最近幾年踩過(guò)的坑都埋在了Util中。
?
Util的開(kāi)發(fā)環(huán)境
?
.Net Core SDK
我們?cè)谑褂?Net Framework時(shí),通常是在更換VS時(shí)升級(jí)SDK。VS換代需要好幾年,所以你可能并不太關(guān)注SDK的版本。
不過(guò)進(jìn)入.Net Core,情況有所不同,一般幾個(gè)月就會(huì)更新一次,Util會(huì)緊跟.Net Core最新版本,你必須關(guān)注SDK的版本問(wèn)題。
如果你不知道在哪里下載SDK,在百度搜索可不是那么容易,下面介紹下載.Net Core SDK的正確姿勢(shì)。
在任意項(xiàng)目上右鍵,彈出菜單中選擇屬性。
在“目標(biāo)框架”選擇“安裝其它框架”,進(jìn)入下載頁(yè)面。
下載頁(yè)面選擇最新的正式版本SDK,SDK是給開(kāi)發(fā)機(jī)器用的,Runtime是在部署到服務(wù)器上用的,SDK已經(jīng)包含了Runtime,注意這個(gè)區(qū)別。
?
開(kāi)發(fā)工具
VS 2017最新版本。
如果你還在用VS2015,但又想用最新技術(shù),這可能讓你吃盡苦頭。不要擔(dān)心,VS2015和VS2017可以共存,多安裝一個(gè)就好了。
Resharper(R#)最新版本。
R#是一個(gè)VS上的重構(gòu)插件,開(kāi)發(fā)代碼不一定需要R#,但你想開(kāi)發(fā)出更優(yōu)雅的代碼,R#就是一個(gè)神兵利器。VS的代碼提示功能很強(qiáng),但R#能把VS的提示功能再提升幾個(gè)檔次。
R#的主要毛病是非常卡,如果你的電腦沒(méi)有固態(tài)硬盤(pán),內(nèi)存連16G也沒(méi)有,建議你不要用。
數(shù)據(jù)庫(kù)
SqlServer 2012+
我現(xiàn)在主要用Sql Server來(lái)做測(cè)試,生產(chǎn)環(huán)境使用的是PgSql。
目前提供的Demo包含一個(gè)Sql Server的建庫(kù)腳本,所以你需要安裝它,尚未提供EF遷移和其它數(shù)據(jù)庫(kù)腳本,后續(xù)有空會(huì)增加上來(lái)。
PostgreSql(PgSql)
MySql
前端環(huán)境
幾年前,如果需要某個(gè)Js組件,我會(huì)從網(wǎng)上下載并把它放進(jìn)項(xiàng)目,然后在頁(yè)面上引用它。每當(dāng)有版本更新,我就到它的官網(wǎng)下載一個(gè)新的。為了讓頁(yè)面加載得更快,我會(huì)在發(fā)布時(shí)用打包工具把多個(gè)Js文件打成一個(gè),然后再用壓縮工具給它瘦身。
如果只引用了少量幾個(gè)Js文件,這樣做沒(méi)什么問(wèn)題,簡(jiǎn)單易懂,是個(gè)人就能做。
隨著前端需求的增加,你慢慢引入了十幾個(gè),幾十個(gè)乃至數(shù)百個(gè)Js文件,維護(hù)它們就是一場(chǎng)噩夢(mèng)。
如果能讓文件下載,版本更新,打包壓縮全部自動(dòng)化,你就能從大堆Js文件中解脫出來(lái)。
NodeJs與它的生態(tài)系統(tǒng)解決了這個(gè)難題。
NodeJs
NodeJs是利用Google Chrome V8引擎來(lái)執(zhí)行Js的運(yùn)行環(huán)境,這樣Js就可以脫離瀏覽器運(yùn)行了。
首先查看你的機(jī)器是否已安裝NodeJs,在命令行輸入node -v 。
? 如果你跟我一樣,對(duì)命令行十分反感,是時(shí)候作出一些改變了,某些場(chǎng)景命令行比UI操作更便利,還有一些情況必須使用命令行,比如Npm還原。采用.Net Core最大的亮點(diǎn)是可以跨平臺(tái)部署,換句話(huà)說(shuō),你可以把代碼部署到Linux, 為了節(jié)省服務(wù)器資源,通常不會(huì)在Linux服務(wù)器上啟動(dòng)UI,你必須能通過(guò)黑屏命令行操控它。
你可以看到我的機(jī)器上安裝的NodeJs版本是8.9.3,如果你的NodeJs版本很低,可能會(huì)讓后續(xù)操作失敗,另外我聽(tīng)到群里有同學(xué)反饋,NodeJs版本過(guò)高也會(huì)出現(xiàn)問(wèn)題,我還沒(méi)有測(cè)試過(guò),如果你環(huán)境上出現(xiàn)問(wèn)題,可以安裝我這個(gè)版本。
你可以通過(guò)這個(gè)地址http://nodejs.cn/download下載安裝NodeJs。安裝完成,記得重啟電腦,這是怪異問(wèn)題的必殺技之一。
?
?
Npm(Node Package Manager)
Npm是NodeJs包管理器,它類(lèi)似于我們的Nuget。當(dāng)安裝完NodeJs,Npm會(huì)被默認(rèn)安裝。?
前端非常混亂,包管理器就有很多,比如Bower,VS在之前的版本默認(rèn)提供了對(duì)Bower的支持,不過(guò)后面刪除了它,這也從側(cè)面說(shuō)明了Npm擊敗了競(jìng)爭(zhēng)對(duì)手,成為前端事實(shí)上的標(biāo)準(zhǔn)包管理器。
當(dāng)你需要某個(gè)Js組件時(shí),不用再千里迢迢打開(kāi)網(wǎng)站下載,只需打開(kāi)Npm配置文件package.json,把你要下載的Js組件寫(xiě)上去就好了。
想知道某個(gè)Js組件有沒(méi)有更新,只需在package.json移動(dòng)鼠標(biāo)即可。
或者直接在package.json的版本號(hào)位置敲代碼提示快捷鍵,Ctrl + 空格 或 Ctrl + J。
?
當(dāng)你把需要的Js組件添加到package.json,Ctrl + S保存以后,VS就開(kāi)始自動(dòng)下載了,這讓你心情非常愉快,VS不愧是銀河系最強(qiáng)的IDE。?
過(guò)了一個(gè)小時(shí),你吃完飯回來(lái),發(fā)現(xiàn)它還在下載,難道是網(wǎng)絡(luò)不好?這是由我國(guó)眾所周知的原因?qū)е碌摹?/span>?
要想讓Npm還原成功,你必須禁止VS Npm自動(dòng)還原,先來(lái)設(shè)置下VS。
在國(guó)內(nèi)如果沒(méi)有特殊裝置,Npm基本無(wú)法還原成功。
一種選擇是使用淘寶鏡像,這是我初期使用的方法。
另一種方法是使用Yarn來(lái)還原Npm,有人給我推薦了它,使用后發(fā)現(xiàn)這家伙的下載速度更快,我現(xiàn)在也強(qiáng)烈推薦給你。
先去這里https://yarn.bootcss.com/docs/install/#windows-stable下載一個(gè)Yarn安裝包。
安裝完成,命令行yarn –v,看看是否安裝成功。
?Webpack
Webpack是NodeJs生態(tài)中用來(lái)進(jìn)行自動(dòng)化構(gòu)建的工具。它非常強(qiáng)大,打包壓縮不過(guò)是它的冰山一角。
前端的混亂來(lái)自開(kāi)源項(xiàng)目的百家爭(zhēng)鳴和低耦合的設(shè)計(jì)理念。
前端技術(shù)一片繁榮,這得益于開(kāi)源項(xiàng)目的蓬勃發(fā)展,低耦合的設(shè)計(jì)理念讓你在遇到相關(guān)問(wèn)題只需尋找對(duì)應(yīng)組件,集成上來(lái)就能結(jié)束戰(zhàn)斗。
這確實(shí)很好,但卻苦了我們這些碼農(nóng)。
你必須對(duì)各種框架,各種組件,以及這些組件中的插件非常了解,否則你無(wú)法工作。
這大幅增加了學(xué)習(xí)成本,專(zhuān)業(yè)前端人員薪資高確實(shí)是有道理的,看看別人吃了多少苦頭。
還在懷念.Net前幾年高度集成的開(kāi)發(fā)方式嗎?那個(gè)時(shí)代已經(jīng)過(guò)去了。
在Webpack之前,還有Grunt,Gulp等構(gòu)建工具,Webpack憑借遞歸查找依賴(lài)的能力打敗了它們,成為前端事實(shí)上的標(biāo)準(zhǔn)自動(dòng)化構(gòu)建工具。
Webpack是一個(gè)插件體系,擁有豐富的插件,不論打包壓縮,還是將Ts編譯成Js,都有相應(yīng)的插件支持。
Webpack表面上很易用,這是建立在你對(duì)它的插件很了解的基礎(chǔ)上,如果你是個(gè)新手,想添加某個(gè)特性,但卻不知道哪個(gè)插件具有這個(gè)功能,通過(guò)查看webpack官網(wǎng)并不一定能解決問(wèn)題,因?yàn)楹芏嗖寮恼f(shuō)明非常模糊,你只能自己多嘗試。
雖然如此,你也大可不必泄氣,你所使用的前端框架,會(huì)為你做好Webpack配置,基本不用操心。
一旦把Webpack配置好,它就會(huì)非常易用,自動(dòng)化構(gòu)建的整個(gè)流程被隱藏在一行npm命令中。
Webpack通過(guò)Npm安裝,所以不需要單獨(dú)安裝它了。
?
Util Demo運(yùn)行說(shuō)明
開(kāi)發(fā)環(huán)境確認(rèn)
上面已經(jīng)簡(jiǎn)要介紹了Util的開(kāi)發(fā)環(huán)境,為了將Util Demo運(yùn)行起來(lái),我們?cè)俅_認(rèn)一遍。
你安裝了VS 2017最新版本。
你安裝了.Net Core SDK正式版最新版本。
你安裝了Sql Server 2012或更新版本。
你安裝了NodeJs。
你安裝了Yarn。
你已經(jīng)從Github下載了Util,并保證是最新版本。
運(yùn)行數(shù)據(jù)庫(kù)腳本
由于我開(kāi)發(fā)采用的是Db First,所以給你提供了一個(gè)Sql Server的建庫(kù)腳本,這也是我平時(shí)的測(cè)試方式。
不要擔(dān)心,你完全可以使用Code First方式,這只是我的個(gè)人習(xí)慣問(wèn)題。
請(qǐng)將Sample.sql建庫(kù)腳本復(fù)制到Sql Server并執(zhí)行。
?
下面,你需要修改Util.Samples.Webs項(xiàng)目數(shù)據(jù)庫(kù)連接字符串,它在這里。
還原Npm
在Util.Samples.Webs項(xiàng)目上右鍵,選擇“在文件資源管理器中打開(kāi)文件夾”,進(jìn)入U(xiǎn)til.Samples.Webs項(xiàng)目根目錄。
按住Shift,在Util.Samples.Webs項(xiàng)目根目錄空白位置右鍵,選擇“在此處打開(kāi)命令窗口”。這樣做的目的是打開(kāi)一個(gè)命令行,并且路徑是Util.Samples.Webs項(xiàng)目根目錄。
注意:不同的操作系統(tǒng),菜單提示不同,我用的是Windows 2008 R2。
輸入命令yarn,開(kāi)始還原。
?
如果你人品爆發(fā),可能沒(méi)有看見(jiàn)任何錯(cuò)誤就還原成功了。
不過(guò)在大部分情況下,你都會(huì)得到一個(gè)錯(cuò)誤。這是由大名鼎鼎的巨無(wú)霸先生node-sass導(dǎo)致的。
node-sass是用來(lái)幫助將scss編譯成css的編譯工具,scss是一個(gè)css預(yù)處理器,給css增加了變量,控制結(jié)構(gòu)等編程元素。Boostrap等現(xiàn)代前端框架都采用scss編寫(xiě)。
我觀(guān)察到,node-sass從npm下載后,會(huì)運(yùn)行腳本,然后訪(fǎng)問(wèn)github及其它Url,毫無(wú)疑問(wèn),這將被攔截在搖籃中。
安裝node-sass的解決方案是cnpm,這是淘寶提供的npm包安裝工具。
我們先來(lái)安裝cnpm。
npm install -g cnpm --registry=https://registry.npm.taobao.org下面用cnpm來(lái)安裝node-sass。
cnpm install node-sass如果你運(yùn)氣不是太差,npm包應(yīng)該還原成功了。?
如果你是第一次接觸npm,在還原完成后,項(xiàng)目根目錄會(huì)出現(xiàn)一個(gè)node_modules文件夾,你細(xì)數(shù)了一下文件的數(shù)目,大吃一驚,居然有10幾萬(wàn)個(gè)文件,這就是低耦合的悲劇,習(xí)慣就好。?
在cnpm還原node-sass的提示中,有一個(gè)版本警告信息,不要管它,目前我使用的是node-sass 4.7.2這個(gè)版本,更高版本有編碼錯(cuò)誤,如果在scss中存在中文注釋,會(huì)編譯失敗。?
我發(fā)現(xiàn)npm治愈了我的升級(jí)強(qiáng)迫癥,你如果也有這個(gè)毛病,請(qǐng)小心測(cè)試后再升級(jí)。?
當(dāng)你發(fā)現(xiàn)cnpm如此強(qiáng)悍,連node-sass這個(gè)巨無(wú)霸都敗在它的腳下,你可能會(huì)直接用cnpm還原所有npm包。
注意:cnpm還原的包與npm并不完全相同,特別是使用VS開(kāi)發(fā)前端項(xiàng)目,問(wèn)題尤其嚴(yán)重,在打開(kāi)解決方案時(shí),會(huì)卡住好幾分鐘,你只應(yīng)該用cnpm來(lái)還原node-sass,其它的采用yarn。
?
執(zhí)行Webpack構(gòu)建流程
你只需要一行npm命令就能把webpack構(gòu)建流程跑起來(lái)。
npm run dev如果這個(gè)過(guò)程沒(méi)有報(bào)任何異常,說(shuō)明構(gòu)建成功了。
如果有異常,通常說(shuō)明npm包尚未完全還原成功。
?
運(yùn)行Demo
終于你可以把Demo運(yùn)行起來(lái)了,F5把瀏覽器彈起來(lái)。
這是一個(gè)貌不驚人的Crud Demo,看到這個(gè)界面很多人可能大失所望,搞了半天就這么個(gè)東西?
不要急,我給你展示的只是最簡(jiǎn)單的東西,好讓你快速上手,Util封裝的是Angular官方提供的Material這套組件庫(kù),你可以到Material的官網(wǎng)https://material.angular.io/看看它包含哪些東西。
Material缺乏像Ng Alain這樣的腳手架主界面,我項(xiàng)目上是前端人員自己搭建的。另外似乎國(guó)內(nèi)用Material風(fēng)格來(lái)開(kāi)發(fā)管理后臺(tái)的并不多,基于這個(gè)原因,我已經(jīng)有封裝Ng Alain + Ng-Zorro的計(jì)劃。?
另一個(gè)Demo頁(yè)面展示了樹(shù)型Crud操作,將向你展示Util是如何對(duì)樹(shù)型關(guān)系進(jìn)行封裝的。
?
注意事項(xiàng)
如果你根據(jù)上面的介紹還是無(wú)法將npm還原成功,可能有以下原因。
VS進(jìn)程鎖定了node_modules目錄,你在還原時(shí)最好把VS關(guān)掉。
如果你之前已經(jīng)還原過(guò),可能存在垃圾文件干擾,這需要先刪除node_modules目錄,你可以直接刪除文件夾,不過(guò)可能需要半小時(shí)以上時(shí)間,你應(yīng)該通過(guò)命令行來(lái)刪除它。
刪除node_modules目錄也應(yīng)該關(guān)掉VS,以免干擾。
你需要特別關(guān)照node_sass,沒(méi)事就cnpm搞它一下。
小結(jié)
本文介紹了Util的運(yùn)行環(huán)境以及注意事項(xiàng),初次接觸現(xiàn)代前端環(huán)境會(huì)有點(diǎn)不適,不過(guò)挺過(guò)去你就能再多干幾年。
未完待續(xù),下一篇將對(duì)Util Demo的運(yùn)行機(jī)制進(jìn)行介紹。
寫(xiě)文需要?jiǎng)恿?#xff0c;請(qǐng)大家多多支持,點(diǎn)下推薦,Github點(diǎn)下星星。
Util應(yīng)用框架交流一群: 24791014
相關(guān)文章:
.Net Core應(yīng)用框架Util介紹(一)
原文鏈接:https://www.cnblogs.com/xiadao521/p/Util-Introduction-2.html
.NET社區(qū)新聞,深度好文,歡迎訪(fǎng)問(wèn)公眾號(hào)文章匯總 http://www.csharpkit.com
總結(jié)
以上是生活随笔為你收集整理的.Net Core应用框架Util介绍(二)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: .NET Core WebApi中实现多
- 下一篇: .Net架构篇:实用中小型公司支付中心设