关于MVC,前后端,以及前后端分离,还有前后端同构的问题其实我已经分析的非常清楚了。
但是为了能够让所有人更加系统的从各个角度理解他们之间的关系,我在这边再重新总结,并提合并成一篇文章。
理解所有这些问题,首先要搞清楚的是:
前后端是Web前后端
- 不是项目前后端
- 也不是服务器前后端
我们通常所说的前后端是特指Web的前后端。
他不是项目的前后端,也不是服务器的前后端。
因为对于Web来讲,前后端是确定的。
前端就是前端,后端就是后端,并不存在分离的问题。
所以我们得到第二个重点。
不存在前后端分离的问题。如果有,那都是MVC分离
同时大多数的所谓前后端分离,实际上都是错误的。
而本质上这些所谓分离都是MVC的分离。
前后端存在着同构化,而不是分离
对于以后的Web来说,不需要分离,而是需要合并的。这种趋势在Nodejs出来后显得越来越显著。目前已经有很多Nodejs的库是前后端共通的,也就是所谓的前后端统一或者同构(即英文里的isomorphic js)。
当有象JS这种前后端两栖的语言出现时就促成了前后端的同构。
所以我们可以看到并不存在前后端分离,但是存在MVC的分离。
前后端存在的现象是代码共享,即前后端同构。
Web Assembly将会进一步促进前后端同构
由于新技术Web Assembly的推出,未来会有更多的语言可以在浏览器端执行,所以支持前后端同构的方案与语言将会越来越丰富。
下面列举出一些相关文章,用于深入的理解这个问题:
前端与后端是如何区分的?
讨论文章:
结论:通过运行环境区分:浏览器端运行的内容是前端,服务器端运行的内容是后端
结论:通过运行环境区分:浏览器端运行的内容是前端,服务器端运行的内容是后端
MVC与前后端有什么关系?
讨论文章: https://github.com/calidion/calidion.github.io/issues/3
结论: MVC可以存在于前端,也可以存在于后端。
前后端分离的问题存在吗?
讨论文章:
结论:并不存在前后端分离的问题,因为前后端是天然分离的,基于结论1,。引出一个新的话题,那就是前后端同构。未来的Web技术更多的是合并,而不是分离。
注:
1. 分离是神话时代就已经确立的,没有必要再说前后端分离了。
2. 目前的所有分离都是基于MVC的分离。
3. 现在所谓的将模板放到node而称为前后端分离的说法是完全错误的
4. 目前前后端都有很多强大的MVC框架,而拆分MVC是永恒的话题。
前后端同构
说明:
- JS是目前唯一的可进行前后端同构的语言
- Web Assembly可以导致更多的可实现前后端同构的语言出现
- 目前主张前后同异的框架有: reactjs, angular2, meteor以及很多模板类,通用类库
结论:前后端同构是未来的一个方向,至于最终能不能成为主流,还有得时间的考验。个人预测同构与异构会长期共存,那些通用的功能将会越来越多的采用同构。
关于项目的前后端与Web的前后端
说明:
- 我对很多人的逻辑是很无语的
- 已经不止有一次有人跟我说项目的前后端了
- 我想说项目的前后端你爱怎么划分就怎么划分,但是跟我们这里讨论的Web前后端没有半毛钱关系。
- 在你的项目里,你就是将MYSQL当成是项目的前端,也不关我的事。
- 但是,如果你想把MYSQL当成是Web的前端,那就别怪我批你,骂你。你的逻辑是体育老师教的?
- 再跟我提如果是项目的前后端呢的问题的,请你好好考虑你的智商是不是要充充值了?
- 最后请你好好区分清楚什么是Web的前后端,什么是项目的前后端。