MVC 与前后端分离

2015-12-31 23:06:14 +08:00
 lao454490095

wiki里面看到, MVC 对三个 component 的功能作了界定,并且定义了这三个 component 的交互方式。

他在最后还这样说了:

Early web MVC frameworks took a thin client approach that placed almost the entire model, view and controller logic on the server. This is still reflected in popular frameworks such as Rails, Django, ASP.NET MVC and Express. In this approach, the client sends either hyperlink requests or form input to the controller and then receives a complete and updated web page (or other document) from the view; the model exists entirely on the server. As client technologies have matured, frameworks such as AngularJS, EmberJS, JavaScriptMVC and Backbone have been created that allow the MVC components to execute partly on the client (also see Ajax).

问题是:这些前端技术的使用可以将 View 部分移到前端。但是这样子理解的话,这三个组件的交互方式就不是定义的那样子了,这样子还是 MVC 的实践吗?是不是矛盾了?

1929 次点击
所在节点    问与答
5 条回复
FrankFang128
2015-12-31 23:09:01 +08:00
不要局限于前后端分离了,明年的技术风向会变。
lao454490095
2015-12-31 23:16:37 +08:00
@FrankFang128 只是毕业设计想试试新东西,还没想那么多。
hbkdsm
2016-01-01 00:23:47 +08:00
“这三个组件的交互方式就不是定义的那样子了”

这个说法想当然了,三个组件的交互方式哪里变化了?

前后端分离是指把一个项目解耦成两个独立的项目( web 客户端项目 + server 端项目),两者通过约定好的接口传输轻量级的数据(一般就是 JSON 格式),而不是传输整个页面。两个项目可以分别迭代,互不干扰,但 server 端各个组分的职责并没有发生变化。 Controller 是控制中枢,负责处理 input data ,并从 Model 获取数据传递给 View / Serializer , Model 仍然是 doorkeeper 和 data store ,负责数据验证和数据持久化, View 层只负责数据展示 /格式化。三者各司其职,交互方式一点都没有变啊。

对于 server 端来说,变化最大的是 View 层。前后端分离后, View 层被大大弱化了,不需要再生成 HTML 页面,只需要返回 JSON 即可。应该说 View 层的任务大大减轻了,换个角度理解,也可以理解为 View 层几乎不存在了( server 端只存在 Model 和 Controller ,也就是你说的 View 层移到了浏览器端)。

你的问题在于没把它们当作两个项目考虑,那当然搞不清楚各个组分的交互方式了。
lao454490095
2016-01-01 03:54:54 +08:00
@hbkdsm

『 View 层只负责数据展示 /格式化』以及『 View 层的任务大大减轻了,换个角度理解,也可以理解为 View 层几乎不存在了』这两句话我觉得很在理。但是对于后者我想我还要做个小实验证实下。

我的确是把他们混在一起考虑了,因为最初的题目是『 MVC 的框架设计与实现』,一开始是想按照传统的 MVC ,把页面渲染放在后端来,但是之后又决定将其做成 RESTful 框架,却又忽略了 RESTful 里面 serializer 的工作就是 View 层的工作(按照 wiki 的定义: A view generates an output presentation to the user based on changes in the model.)。于是可能误认前端渲染就是 MVC 里面的 View 层。

如果以 serializer 为 View 层去理解的话,交互方式的确没变;但如果认为将 View 层分到了前端的话,交互方式的确变了,这个时候请求的对象不再是 Controller ,而是相当于请求 View 之后, View 再请求 Controller 了。

感谢!祝 2016 新年快乐!
jiyinyiyong
2016-01-01 16:46:20 +08:00
MVC 是早期图形界面开发当中总结出来的一些套路. Model View 两者分离, Controller 也抽象出来. 并不局限在客户端或者服务端具体的实现方案上.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/247588

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX