V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
lao454490095
V2EX  ›  问与答

MVC 与前后端分离

  •  
  •   lao454490095 · 2015-12-31 23:06:14 +08:00 · 1864 次点击
    这是一个创建于 3052 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 的实践吗?是不是矛盾了?

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

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

    前后端分离是指把一个项目解耦成两个独立的项目( 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
        4
    lao454490095  
    OP
       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
        5
    jiyinyiyong  
       2016-01-01 16:46:20 +08:00
    MVC 是早期图形界面开发当中总结出来的一些套路. Model View 两者分离, Controller 也抽象出来. 并不局限在客户端或者服务端具体的实现方案上.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4153 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 00:57 · PVG 08:57 · LAX 17:57 · JFK 20:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.