V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
sydneyzh
V2EX  ›  JavaScript

前端分形 mvc 过时了吗?

  •  
  •   sydneyzh · 2015-06-08 09:18:12 +08:00 · 4972 次点击
    这是一个创建于 3247 天前的主题,其中的信息可能已经有所发展或是发生改变。

    做单页应用,不用backbone等库,自己写个小框架的话
    分形mvc过时了吗?

    第 1 条附言  ·  2015-06-08 10:19:05 +08:00
    简单的web单页应用啊。
    没有说的更具体是因为我也没有针对哪个场景。
    问题里说了自己搭的意思就是不需要密集交互,也不需要后台。
    ps。抖机灵调侃的回答看得多了就觉得很烦,你们不觉得吗
    26 条回复    2015-06-09 01:54:16 +08:00
    taoche
        1
    taoche  
       2015-06-08 09:21:56 +08:00   ❤️ 2
    任何脱离应用场景就讲技术选择的都是耍流氓
    clino
        2
    clino  
       2015-06-08 10:23:09 +08:00
    "分形mvc"是什么?我怎么google不到呢
    sydneyzh
        3
    sydneyzh  
    OP
       2015-06-08 10:27:59 +08:00
    @clino 就是说每个(功能)模块内部还有一套model(也可以叫做config data),dom method, even listener, 初始化等MVC结构。方便自由拆装。不知道现在还有没有更高明的轻量级框架概念,所以才问这个问题
    quix
        4
    quix  
       2015-06-08 10:36:40 +08:00
    建议楼主提问时候描述精确详细一点, 不要造术语, 尽量带例子... 问得不仔细就不能怪别人回答不认真了.
    sydneyzh
        5
    sydneyzh  
    OP
       2015-06-08 10:48:50 +08:00
    @quix 书上说fmvc已经被用了十年了,我以为大家都懂
    clino
        6
    clino  
       2015-06-08 11:15:35 +08:00
    @sydneyzh 连google都不知道,你还能"以为大家都懂"? 不管是 分形mvc 还是 fmvc 都 google不到
    这是什么书啊...
    yangmls
        7
    yangmls  
       2015-06-08 11:26:17 +08:00
    自己写的有把握比现在的轮子好吗?或者解决现在的轮子解决不了的问题?
    yangmls
        8
    yangmls  
       2015-06-08 11:28:41 +08:00
    @sydneyzh 哪本书有分形 MVC 的说法?backbone 甚至只能算个 MV 框架
    gilgamesh
        9
    gilgamesh  
       2015-06-08 11:28:43 +08:00
    相比于抖机灵的回答,无意义空洞的提问更烦人。
    sydneyzh
        10
    sydneyzh  
    OP
       2015-06-08 11:30:08 +08:00
    @clino 我是不懂啊,所以才来问,怪我咯?
    sydneyzh
        11
    sydneyzh  
    OP
       2015-06-08 11:31:23 +08:00
    @yangmls 您脑洞开大了。我题目已经说了,是简易框架。而且我没有说backbone是mvc,我知道很多人觉得说backbone称为mvc是一种冒犯,但我没有这么说。
    101
        12
    101  
       2015-06-08 11:31:41 +08:00
    Which book?
    taoche
        13
    taoche  
       2015-06-08 11:32:09 +08:00
    Single Page Application 也会分场景的。 你说的简单的单页面应用, 数据交互多不多,视图更新的频繁不频繁,等等。 这就是应用场景。

    脱离应用场景谈 选择 backbone 还是其他类库或者框架 本来就不能一概而论。

    MVC只是手段 而非目的。 最终的是为了保证应用的可维护和可拓展性让逻辑更清晰。
    sydneyzh
        14
    sydneyzh  
    OP
       2015-06-08 11:36:00 +08:00
    @gilgamesh 很多人爱抖机灵或调侃别人,只是因为自己不懂,感到被冒犯,又恰好是个话痨。不懂可以不要回答啊,却跑过来针对我。技术板块欢迎这样灌水么?
    gilgamesh
        15
    gilgamesh  
       2015-06-08 11:36:01 +08:00
    2333, BackBone 是 model-collection-view
    gilgamesh
        16
    gilgamesh  
       2015-06-08 11:38:10 +08:00
    并不,有可能是这个问题宽泛地让人无从回答,只好吐槽以想题主获得更多交互和有用信息便于回答。
    sydneyzh
        17
    sydneyzh  
    OP
       2015-06-08 11:42:04 +08:00
    sydneyzh
        18
    sydneyzh  
    OP
       2015-06-08 11:43:50 +08:00
    @taoche 是的,你这条回复说的是对的。当然了,我也希望多了解一些不同的框架概念。所以才来问。
    yyfearth
        19
    yyfearth  
       2015-06-08 13:19:48 +08:00   ❤️ 1
    @yangmls @gilgamesh Backbone 是一个比较标准的MVC框架
    只是Class命名上不是按照 MVC 来命名的

    Model 和 Collection 就是 Model (前者是一个或者是一堆而已)
    View 和 Router 实际上都是 Controller (我们在View里面绑定事件和处理时间和让Model+Template render出来 就是Controller干的事情了 Router 就不用说了)
    HTML template 或者说 DOM 才是 MVC 里面的 View

    由于 DOM 才是真正的渲染结果和交互事件来源 所以才是真正的 View
    但是一般后端 MVC 框架里面 view 目录一般都是放一些 jsp php 模板 所以说模板是 View 也 OK
    yangmls
        20
    yangmls  
       2015-06-08 16:16:56 +08:00   ❤️ 1
    @yyfearth 主要它缺了一部分东西,就是 Model 和 DOM 的绑定,View 实现的是一个弱控制的玩意,不能双向绑定,甚至连单向绑定都比较残废,对子孙元素精细控制起来也很麻烦。

    而且 backbone 的倾入性很低,不像 angular 那样选了它其他只能按它的规则来,它可以和像 React 这样的组合起来玩,这大概是为什么一般称它为 MV* 框架的原因吧。
    taoche
        21
    taoche  
       2015-06-08 17:37:34 +08:00
    taoche
        22
    taoche  
       2015-06-08 17:39:31 +08:00
    backbone 所谓的mvc 的C 是Collection,集合不是控制器目的是不一样的。 backbone的 view层承担了部分Controller的职能, 所以并没有像传统意义上MVC做层次划分。 所以它不是严格意义上的mvc。
    taoche
        23
    taoche  
       2015-06-08 17:43:33 +08:00   ❤️ 1
    @yangmls 至于backbone的 单向数据绑定, 所以下个定论,backbone的 单向绑定一点都不残废,至于双向数据绑定就向它官网上说的,不需要双向绑定。

    react 也说了双向数据绑定在大型应用中容易出现混乱。 前端的概念就是这样,一直再“革命”
    yangmls
        24
    yangmls  
       2015-06-08 20:52:09 +08:00
    @taoche angular 的双向绑定是可选的,它也能实现单向绑定,如果拿 backbone 的单向绑定和 angular 的比,那么它就是残废的。

    当然 backbone 也能实现完整的单向绑定,但要做的工作很多,几乎是帮 backbone 补坑,当然这不算坑,因为这就是 backbone 的设计思想,Jeremy 大神是个有代码洁癖的人。

    如果一个需求,是一个列表,列表有很多 rows,row 里面还有很多 items,那要实现精细的控制,这个工作就非常繁琐,要至少三个 View (list row item),要处理 collection 的 reset 和 add,要处理 model 的 change 和 delete,change 还要细分到 attribute 上,View 还要作手动的关联,数据量上来,你还不能 append,还得用 DocumentFragment 优化。

    这不是残废是什么?
    yyfearth
        25
    yyfearth  
       2015-06-09 01:44:21 +08:00
    @yangmls MVC 并不需要M+V的绑定
    只要 M+Template->HTML/DOM 就可以了
    或者简单的单项绑定

    一般来说双向绑定的框架往往是MVVM

    至于MV*框架 是 MVC MVP MVVM 等的总称而已
    yyfearth
        26
    yyfearth  
       2015-06-09 01:54:16 +08:00
    @yangmls Backbone 本来就不该和 Angular 在这个方面比
    而且由于 Angular 是个 MVVM 框架
    双向或者单项绑定 并不是发生在View和Model之间 而是 View和View Model之间
    Model和View Model还是不一样的
    Data binding本来就很少在MVC框架里面支持 一般都是在MVP和MVVM的框架里面提供

    而且你看下传统的MVC框架 包括Java的还是全宇宙最好的PHP
    他们的模版也不是完全的和Model自动绑定 连单项绑定都不是

    所以 Backbone 完全符合MVC的
    只是由于它太Light weight 用起来肯定没有其他框架那么方便 只提供最基本的结构
    但是你可以整合很多很多的小library或者框架来让整框架变的方便
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1942 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 16:15 · PVG 00:15 · LAX 09:15 · JFK 12:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.