职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 621|回复: 10

在JavaScript 实现MVC模式的必要性

[复制链接]
郁闷小男人 发表于 2011-8-16 09:26 | 显示全部楼层 |阅读模式
大家觉得在JavaScript的层面使用MVC模式有必要吗,就像EXT JS那样。
MVC模式的好处不说啦。
我发现目前大家在开发页面的JS的时候通常都是杂乱无章,东写一点,西抄一些。当然不是说所有人。
造成的后果肯定是不可维护。
总而言之,大家在做web项目的后期有没考虑过用一些设计模式去重构自己的代码,或者有没觉得如果当初刚开始的时候就应该使用,这样在后期会节省很多工作量。



江波 发表于 2011-8-16 09:26 | 显示全部楼层
整天在网上找插件的家伙是不会想着自己编写js代码的!

木已 发表于 2011-8-16 09:26 | 显示全部楼层
必需的,比如java为什么struts那么流行,可以见得啦。。

话说我当年 发表于 2011-8-16 09:27 | 显示全部楼层
没必要搬套路,MVC对于以前的由服务器生成全部html界面模式来说是必然的,将页面中的数据与视图拆分开,好歹能降低些实现复杂度。并且也只能这么拆(一次请求一个完整页面,这个请求无法拆分)

既然你已经说了JavaScript层面,那表明已经是RIA的概念了,服务器只提供数据接口,不参与任何显示。
RIA与传统的非ajax页面有太多太多不同了,看到此页面左下的滚动广告没?你可以把它看作一个页面,给它套MVC模式。但一个完整的RIA页面,就不是一个MVC可以搞定的了。

对于RIA来说,就不是一个页面对应一个Model/View了,而是一个个组件,组件中可能可以拆分出Model、View;Controller感觉淡化了,它贯穿整个RIA页面,每个层次每个组件有它自有的逻辑,都分散开对各自透明。

例如以Ext的Grid为例(3.x),它就拆分为Store、GridView、ColumnModel、SelectionModel。其中Store、SelectionModel大概可以看作Model,GridView、ColumnModel看作View。但是实际功能上,Store也有加载、排序等逻辑,SelectionModel也有选择记录的逻辑,它们实际上也可以看作是子组件,各有各的内部逻辑。

其实RIA页面就是一个完整的大程序,你可以以windows程序的观念去看待它,在此层面上,没有任何东西可以阻碍你将程序细化,实现更好的OO(除了你自己)。

甚至对于组件层次,MVC都没有太大指导作用了,不是每个组件都必定可以拆成这3部分。例如前面提到的组数据Store,你给拆个view出来看看?

程序设计是最富创造力的,不要被各种模式所束缚,你觉得它们可以拆分,就将它们解耦合吧,通过事件、接口等将它们灵活地关联起来。

找不到我 发表于 2011-8-16 09:27 | 显示全部楼层
前面对MVC的理解肤浅了些,抱歉
刚才看了维基百科上的定义(http://zh.wikipedia.org/wiki/MVC),实际上MVC并没有明确的定义,它更偏向一种概念:显示与数据逻辑的分离。
2d206a0d-8fc4-30ee-9bb7-a8688f5434cc.png

引用
“模型”有对数据直接访问的权力,例如对数据库的访问。“模型”不依赖“视图”和“控制器”,也就是说,模型不关心它会被如何显示或是如何被操作。但是模型中数据的变化一般会通过一种刷新机制被公布。为了实现这种机制,那些用于监视此模型的视图必须事先在此模型上注册,从而,视图可以了解在数据模型上发生的改变。

从图中可以看到,Controller会直接访问View和Model,View会访问到Model以渲染界面,Model通过事件来通知View更新,View通过事件将用户操作传递给Controller处理,Controller修改Model中的数据。

对Model来说,它不关注其它的任何事情,只将数据的变动发布出去
对View来说,它只负责显示Model,以及将用户操作发布出去
对Controller来说,它只用根据View及Model发布的事件来更新Model(当然也有可能修改View)

在ExtJs中很多组件都体现了这样的思想

还是以GridPanel为例,Store就是标准的“模型”(当然还多了一些排序、过滤之类的逻辑),它提供add、remove、update、datachanged等事件,GridView就以此事件进行界面的同步更新。同理于ColumnModel;而SelectionModel、GridPanel就是等就是Controller了,它们只管根据GridView的事件来操作Store、selections。


无处不在 发表于 2011-8-16 09:27 | 显示全部楼层
Ext4.0里面也有MVC结构的东东了哦,怎么可能说没有MVC的必要呢?Ext4 MVC,如果MVC不行,那么Ext4也没多大意义了。。

feiguo 发表于 2011-8-16 09:27 | 显示全部楼层
这个要看需求了,如果是像Ext这种纯Js绘制界面当然有必要,这样代码开起来更有条理,扩展难度降低


如果像jquery一样只是操作下界面html 节点之类的就没必要了

gz-vps 发表于 2011-8-16 09:27 | 显示全部楼层
GWT -> MVC手到拿来。

曾经的小孩 发表于 2011-8-16 09:27 | 显示全部楼层
http://javascriptmvc.com/,这个都已经发展到3.1.0

曾经的小孩 发表于 2011-8-16 09:27 | 显示全部楼层
说实话,最近大量用extjs,发现如果不用MVC整体控制,你的代码会乱的很,当所有的功能在一页上显示时,功能一多,而且功能之间还相互关联,不用MVC会要了你的命
bubble 发表于 2011-8-16 12:14 | 显示全部楼层
{:soso_e179:}{:soso_e179:}{:soso_e179:}{:soso_e179:}{:soso_e179:}{:soso_e179:}{:soso_e179:}{:soso_e179:}{:soso_e179:}{:soso_e179:}
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-4 02:42 , Processed in 0.156508 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表