{"action":"created","issue":{"url":"https://api.github.com/repos/calidion/calidion.github.io/issues/17","repository_url":"https://api.github.com/repos/calidion/calidion.github.io","labels_url":"https://api.github.com/repos/calidion/calidion.github.io/issues/17/labels{/name}","comments_url":"https://api.github.com/repos/calidion/calidion.github.io/issues/17/comments","events_url":"https://api.github.com/repos/calidion/calidion.github.io/issues/17/events","html_url":"https://github.com/calidion/calidion.github.io/issues/17","id":152795701,"number":17,"title":"关于MVC、前端、后端、前后端分离、前后端同构的那些事","user":{"login":"calidion","id":131776,"avatar_url":"https://avatars.githubusercontent.com/u/131776?v=3","gravatar_id":"","url":"https://api.github.com/users/calidion","html_url":"https://github.com/calidion","followers_url":"https://api.github.com/users/calidion/followers","following_url":"https://api.github.com/users/calidion/following{/other_user}","gists_url":"https://api.github.com/users/calidion/gists{/gist_id}","starred_url":"https://api.github.com/users/calidion/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/calidion/subscriptions","organizations_url":"https://api.github.com/users/calidion/orgs","repos_url":"https://api.github.com/users/calidion/repos","events_url":"https://api.github.com/users/calidion/events{/privacy}","received_events_url":"https://api.github.com/users/calidion/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":2,"created_at":"2016-05-03T14:59:55Z","updated_at":"2016-05-04T02:38:40Z","closed_at":null,"body":"关于MVC，前后端，以及前后端分离，还有前后端同构的问题其实我已经分析的非常清楚了。\r\n但是为了能够让所有人更加系统的从各个角度理解他们之间的关系，我在这边再重新总结，并提合并成一篇文章。\r\n\r\n理解所有这些问题，首先要搞清楚的是：\r\n\r\n### 前后端是Web前后端\r\n\r\n1. 不是项目前后端\r\n2. 也不是服务器前后端\r\n\r\n我们通常所说的前后端是特指Web的前后端。\r\n他不是项目的前后端，也不是服务器的前后端。\r\n因为对于Web来讲，前后端是确定的。\r\n前端就是前端，后端就是后端，并不存在分离的问题。\r\n所以我们得到第二个重点。\r\n\r\n### 不存在前后端分离的问题。如果有，那都是MVC分离\r\n\r\n同时大多数的所谓前后端分离，实际上都是错误的。\r\n而本质上这些所谓分离都是MVC的分离。\r\n\r\n### 前后端存在着同构化，而不是分离\r\n\r\n对于以后的Web来说，不需要分离，而是需要合并的。这种趋势在Nodejs出来后显得越来越显著。目前已经有很多Nodejs的库是前后端共通的，也就是所谓的前后端统一或者同构（即英文里的isomorphic js）。\r\n\r\n当有象JS这种前后端两栖的语言出现时就促成了前后端的同构。\r\n\r\n所以我们可以看到并不存在前后端分离，但是存在MVC的分离。\r\n前后端存在的现象是代码共享，即前后端同构。\r\n\r\n### Web Assembly将会进一步促进前后端同构\r\n\r\n由于新技术Web Assembly的推出，未来会有更多的语言可以在浏览器端执行，所以支持前后端同构的方案与语言将会越来越丰富。\r\n\r\n下面列举出一些相关文章，用于深入的理解这个问题：\r\n\r\n\r\n#### 前端与后端是如何区分的？\r\n讨论文章：\r\nhttp://blog.3gcnbeta.com/2015/02/24/Web%E5%BC%80%E5%8F%91%E7%9A%84%E5%89%8D%E7%AB%AF%E4%B8%8E%E5%90%8E%E7%AB%AF%E7%9A%84%E7%95%8C%E7%BA%BF%E5%9C%A8%E9%82%A3%E9%87%8C%EF%BC%9F/\r\n\r\n结论：通过运行环境区分：浏览器端运行的内容是前端，服务器端运行的内容是后端\r\n\r\n#### MVC与前后端有什么关系？\r\n讨论文章： https://github.com/calidion/calidion.github.io/issues/3\r\n\r\n结论： MVC可以存在于前端，也可以存在于后端。 \r\n\r\n#### 前后端分离的问题存在吗？\r\n讨论文章：\r\nhttp://blog.3gcnbeta.com/2016/03/31/%E4%B8%8D%E5%AD%98%E5%9C%A8%E5%89%8D%E5%90%8E%E7%AB%AF%E5%88%86%E7%A6%BB%E7%9A%84%E9%97%AE%E9%A2%98/\r\n\r\n结论：并不存在前后端分离的问题，因为前后端是天然分离的，基于结论1,。引出一个新的话题，那就是前后端同构。未来的Web技术更多的是合并，而不是分离。\r\n\r\n注：\r\n\t1. 分离是神话时代就已经确立的，没有必要再说前后端分离了。\r\n\t2. 目前的所有分离都是基于MVC的分离。\r\n\t3. 现在所谓的将模板放到node而称为前后端分离的说法是完全错误的\r\n\t4. 目前前后端都有很多强大的MVC框架，而拆分MVC是永恒的话题。\r\n\r\n#### 前后端同构\r\n说明：\r\n1. JS是目前唯一的可进行前后端同构的语言\r\n2. Web Assembly可以导致更多的可实现前后端同构的语言出现\r\n3. 目前主张前后同异的框架有: reactjs, angular2, meteor以及很多模板类，通用类库\r\n\r\n结论：前后端同构是未来的一个方向，至于最终能不能成为主流，还有得时间的考验。个人预测同构与异构会长期共存，那些通用的功能将会越来越多的采用同构。\r\n\r\n#### 关于项目的前后端与Web的前后端\r\n说明：\r\n1. 我对很多人的逻辑是很无语的\r\n2. 已经不止有一次有人跟我说项目的前后端了\r\n3. 我想说项目的前后端你爱怎么划分就怎么划分，但是跟我们这里讨论的Web前后端没有半毛钱关系。\r\n4. 在你的项目里，你就是将MYSQL当成是项目的前端，也不关我的事。\r\n5. 但是，如果你想把MYSQL当成是Web的前端，那就别怪我批你，骂你。你的逻辑是体育老师教的？\r\n6. 再跟我提如果是项目的前后端呢的问题的，请你好好考虑你的智商是不是要充充值了？\r\n7. 最后请你好好区分清楚什么是Web的前后端，什么是项目的前后端。"},"comment":{"url":"https://api.github.com/repos/calidion/calidion.github.io/issues/comments/216726784","html_url":"https://github.com/calidion/calidion.github.io/issues/17#issuecomment-216726784","issue_url":"https://api.github.com/repos/calidion/calidion.github.io/issues/17","id":216726784,"user":{"login":"ifzm","id":12740295,"avatar_url":"https://avatars.githubusercontent.com/u/12740295?v=3","gravatar_id":"","url":"https://api.github.com/users/ifzm","html_url":"https://github.com/ifzm","followers_url":"https://api.github.com/users/ifzm/followers","following_url":"https://api.github.com/users/ifzm/following{/other_user}","gists_url":"https://api.github.com/users/ifzm/gists{/gist_id}","starred_url":"https://api.github.com/users/ifzm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ifzm/subscriptions","organizations_url":"https://api.github.com/users/ifzm/orgs","repos_url":"https://api.github.com/users/ifzm/repos","events_url":"https://api.github.com/users/ifzm/events{/privacy}","received_events_url":"https://api.github.com/users/ifzm/received_events","type":"User","site_admin":false},"created_at":"2016-05-04T02:38:40Z","updated_at":"2016-05-04T02:38:40Z","body":"666"}}