本文不會(huì)從精細(xì)的角度去討論某個(gè)框架的技術(shù)細(xì)節(jié),而是從宏觀面上來看前后端框架在應(yīng)用層面上思維的不同锉试。
我們拿兩門編程語(yǔ)言來做參照猫十,C和C++。
簡(jiǎn)而言之呆盖,前后端框架應(yīng)用上的思維區(qū)別拖云,其實(shí)是C語(yǔ)言的函數(shù)式功能封裝,和C++面向?qū)ο蠊δ芊庋b的思維區(qū)別应又。
1.前端框架宙项,以Vue來說明:
前端框架總體思維的模式是面向過程式的。
我們寫C語(yǔ)言程序的時(shí)候株扛,首先需要寫的是Main函數(shù)尤筐,而后需要一個(gè)功能就封裝一個(gè)函數(shù),然后在Main函數(shù)中按照需要的業(yè)務(wù)邏輯席里,將這些功能函數(shù)按照邏輯順序搭配起來叔磷。
同樣,我們搭建好一個(gè)Vue的腳手架工具之后奖磁,相當(dāng)于配置好了一個(gè)Vue的運(yùn)行環(huán)境改基,就相當(dāng)于我們安裝了VC這樣的C語(yǔ)言開發(fā)環(huán)境,而vue的路由咖为,則相當(dāng)于C語(yǔ)言的Main函數(shù)秕狰,之后,我們需要的一個(gè)功能就寫一個(gè)單文件組件躁染,通過路由將當(dāng)文件組件載入進(jìn)來鸣哀。
假如用官方的route.js,那么這個(gè)文件就類似于整個(gè)框架應(yīng)用的“main”文件。而單文件組件吞彤,就類似C語(yǔ)言的函數(shù)我衬,每個(gè)單文件組件封裝一些特定的功能,將這些功能搭配在一起饰恕。
類似如下的思維對(duì)照:
route.js------>main
component----->function(){}
在C語(yǔ)言編程中挠羔,功能函數(shù)需要傳參,需要計(jì)算埋嵌,需要返回值破加,在Vue框架的單文件組件中同樣需要,只是傳參用props雹嗦,返回用this.$emit范舀,然后就是在功能的需求上合是,可能會(huì)要求不同的組件間相互傳參,所以擴(kuò)充了vue.store和vuex這樣管理全局變量的方式锭环,其實(shí)這也就是一種簡(jiǎn)寫而已聪全,因?yàn)镃利用返回值傳參和回調(diào)傳參足夠應(yīng)對(duì)所以的傳參需求,并且可以任意傳參辅辩,而在框架中肯定沒辦法這樣荔烧,所以需要想出其他的辦法來解決傳參的問題。
本質(zhì)上其實(shí)是一回事汽久,只是說法上,C語(yǔ)言中叫做傳參踊餐,而Vue中叫組件間通訊景醇。
其實(shí)這是一個(gè)很核心的思路,而核心思維是面向過程式的思維吝岭,那么了解這種面向過程式的思維模式有什么用呢三痰?其實(shí)我們可以參照C語(yǔ)言的思維:在Vue開發(fā)的時(shí)候,先寫整體的路由和大框架窜管,然后在框架中標(biāo)清需要的哪些組件散劫,一次性將所需組件構(gòu)建好,再進(jìn)行每個(gè)功能組件的細(xì)節(jié)填充幕帆,這樣牢牢的把握住過程式開發(fā)的整體邏輯获搏,開發(fā)的思路會(huì)更清晰。
也不僅僅是Vue失乾,angular和react也同樣也是這樣的函數(shù)式思維模式常熙,換句話說,在應(yīng)用框架開發(fā)前端的時(shí)候碱茁,我們要用的是C語(yǔ)言的面向過程思維裸卫。
2.后端框架,以Laravel來說明
后端框架與前端框架的整體思維略有不同纽竣,整個(gè)思維模式與C++這類面向?qū)ο蟮拈_發(fā)模式更接近墓贿。
同樣,可以把路由文件當(dāng)做main函數(shù)的入口蜓氨,不過聋袋,控制器就相當(dāng)于類的封裝,而不是函數(shù)封裝了语盈。
所以在路由中舱馅,每一個(gè)路由對(duì)應(yīng)控制器的一個(gè)方法,而不是對(duì)應(yīng)一個(gè)組件刀荒,控制器應(yīng)該是一類功能的封裝代嗤,而不是一個(gè)功能的封裝棘钞。
那么類方法中會(huì)有引用其他的對(duì)象,所以必須要深刻的理解依賴注入和控制反轉(zhuǎn)干毅。
也就是說宜猜,后端框架的整個(gè)開發(fā)思維是面向?qū)ο蟮模@與前端框架應(yīng)用上是有本質(zhì)的不同硝逢。