北漂IT民工 的博客

关于MVC、前端、后端、前后端分离、前后端同构的那些事

关于MVC,前后端,以及前后端分离,还有前后端同构的问题其实我已经分析的非常清楚了。
但是为了能够让所有人更加系统的从各个角度理解他们之间的关系,我在这边再重新总结,并提合并成一篇文章。

理解所有这些问题,首先要搞清楚的是:

前后端是Web前后端

  1. 不是项目前后端
  2. 也不是服务器前后端

我们通常所说的前后端是特指Web的前后端。
他不是项目的前后端,也不是服务器的前后端。
因为对于Web来讲,前后端是确定的。
前端就是前端,后端就是后端,并不存在分离的问题。
所以我们得到第二个重点。

不存在前后端分离的问题。如果有,那都是MVC分离

同时大多数的所谓前后端分离,实际上都是错误的。
而本质上这些所谓分离都是MVC的分离。

前后端存在着同构化,而不是分离

对于以后的Web来说,不需要分离,而是需要合并的。这种趋势在Nodejs出来后显得越来越显著。目前已经有很多Nodejs的库是前后端共通的,也就是所谓的前后端统一或者同构(即英文里的isomorphic js)。

当有象JS这种前后端两栖的语言出现时就促成了前后端的同构。

所以我们可以看到并不存在前后端分离,但是存在MVC的分离。
前后端存在的现象是代码共享,即前后端同构。

Web Assembly将会进一步促进前后端同构

由于新技术Web Assembly的推出,未来会有更多的语言可以在浏览器端执行,所以支持前后端同构的方案与语言将会越来越丰富。

下面列举出一些相关文章,用于深入的理解这个问题:

前端与后端是如何区分的?

讨论文章:

Web开发的前端与后端的界线在那里?

结论:通过运行环境区分:浏览器端运行的内容是前端,服务器端运行的内容是后端

结论:通过运行环境区分:浏览器端运行的内容是前端,服务器端运行的内容是后端

MVC与前后端有什么关系?

讨论文章: https://github.com/calidion/calidion.github.io/issues/3

结论: MVC可以存在于前端,也可以存在于后端。

前后端分离的问题存在吗?

讨论文章:

并不存在前后端分离的问题

结论:并不存在前后端分离的问题,因为前后端是天然分离的,基于结论1,。引出一个新的话题,那就是前后端同构。未来的Web技术更多的是合并,而不是分离。

注:

1. 分离是神话时代就已经确立的,没有必要再说前后端分离了。
2. 目前的所有分离都是基于MVC的分离。
3. 现在所谓的将模板放到node而称为前后端分离的说法是完全错误的
4. 目前前后端都有很多强大的MVC框架,而拆分MVC是永恒的话题。

前后端同构

说明:

  1. JS是目前唯一的可进行前后端同构的语言
  2. Web Assembly可以导致更多的可实现前后端同构的语言出现
  3. 目前主张前后同异的框架有: reactjs, angular2, meteor以及很多模板类,通用类库

结论:前后端同构是未来的一个方向,至于最终能不能成为主流,还有得时间的考验。个人预测同构与异构会长期共存,那些通用的功能将会越来越多的采用同构。

关于项目的前后端与Web的前后端

说明:

  1. 我对很多人的逻辑是很无语的
  2. 已经不止有一次有人跟我说项目的前后端了
  3. 我想说项目的前后端你爱怎么划分就怎么划分,但是跟我们这里讨论的Web前后端没有半毛钱关系。
  4. 在你的项目里,你就是将MYSQL当成是项目的前端,也不关我的事。
  5. 但是,如果你想把MYSQL当成是Web的前端,那就别怪我批你,骂你。你的逻辑是体育老师教的?
  6. 再跟我提如果是项目的前后端呢的问题的,请你好好考虑你的智商是不是要充充值了?
  7. 最后请你好好区分清楚什么是Web的前后端,什么是项目的前后端。