本文不会从精细的角度去讨论某个框架的技术细节,而是从宏观面上来看前后端框架在应用层面上思维的不同。
我们拿两门编程语言来做参照,C和C++。
简而言之,前后端框架应用上的思维区别,其实是C语言的函数式功能封装,和C++面向对象功能封装的思维区别。
1.前端框架,以Vue来说明:
前端框架总体思维的模式是面向过程式的。
我们写C语言程序的时候,首先需要写的是Main函数,而后需要一个功能就封装一个函数,然后在Main函数中按照需要的业务逻辑,将这些功能函数按照逻辑顺序搭配起来。
同样,我们搭建好一个Vue的脚手架工具之后,相当于配置好了一个Vue的运行环境,就相当于我们安装了VC这样的C语言开发环境,而vue的路由,则相当于C语言的Main函数,之后,我们需要的一个功能就写一个单文件组件,通过路由将当文件组件载入进来。
假如用官方的route.js,那么这个文件就类似于整个框架应用的“main”文件。而单文件组件,就类似C语言的函数,每个单文件组件封装一些特定的功能,将这些功能搭配在一起。
类似如下的思维对照:
route.js------>main
component----->function(){}
在C语言编程中,功能函数需要传参,需要计算,需要返回值,在Vue框架的单文件组件中同样需要,只是传参用props,返回用this.$emit,然后就是在功能的需求上,可能会要求不同的组件间相互传参,所以扩充了vue.store和vuex这样管理全局变量的方式,其实这也就是一种简写而已,因为C利用返回值传参和回调传参足够应对所以的传参需求,并且可以任意传参,而在框架中肯定没办法这样,所以需要想出其他的办法来解决传参的问题。
本质上其实是一回事,只是说法上,C语言中叫做传参,而Vue中叫组件间通讯。
其实这是一个很核心的思路,而核心思维是面向过程式的思维,那么了解这种面向过程式的思维模式有什么用呢?其实我们可以参照C语言的思维:在Vue开发的时候,先写整体的路由和大框架,然后在框架中标清需要的哪些组件,一次性将所需组件构建好,再进行每个功能组件的细节填充,这样牢牢的把握住过程式开发的整体逻辑,开发的思路会更清晰。
也不仅仅是Vue,angular和react也同样也是这样的函数式思维模式,换句话说,在应用框架开发前端的时候,我们要用的是C语言的面向过程思维。
2.后端框架,以Laravel来说明
后端框架与前端框架的整体思维略有不同,整个思维模式与C++这类面向对象的开发模式更接近。
同样,可以把路由文件当做main函数的入口,不过,控制器就相当于类的封装,而不是函数封装了。
所以在路由中,每一个路由对应控制器的一个方法,而不是对应一个组件,控制器应该是一类功能的封装,而不是一个功能的封装。
那么类方法中会有引用其他的对象,所以必须要深刻的理解依赖注入和控制反转。
也就是说,后端框架的整个开发思维是面向对象的,这与前端框架应用上是有本质的不同。