开源中国

我们不支持 IE 10 及以下版本浏览器

It appears you’re using an unsupported browser

为了获得更好的浏览体验,我们强烈建议您使用较新版本的 Chrome、 Firefox、 Safari 等,或者升级到最新版本的IE浏览器。 如果您使用的是 IE 11 或以上版本,请关闭“兼容性视图”。
MVC 已死,是时候用 MOVE 了 - 技术翻译 - 开源中国社区

MVC 已死,是时候用 MOVE 了 【已翻译100%】

标签: <无>
lidashuang 推荐于 4年前 (共 7 段, 翻译完成于 03-18) 评论 8
收藏  
37
推荐标签: 待读

MVC是了不起的想法。你有模型——带有很好的内部独立状态,视图——内部处理UI,可控制器——可以处理.....

什么!!!(控制器处理什么!!!)

我不是第一个注意到这个问题的人。你的MVC很可能在控制器里写了很多的代码,因为你也不知道该写在别的什么地方。

为了解决这个问题,我开始使用新的设计模式:MOVEModels(模型),Operations(操作),Views(视图),Events(事件)。

傅小黑
 翻译得不错哦!

概述

Architecture of a MOVE app

我可以马上阐明模式细节,不过先看看这个MOVE应用的基本结构图。

  • Models封装了应用需要知道的所有事情
  • Operations封装了应用做的所有事情
  • Views是应用于用户的中介
  • Events将各个组件安全地组合起来
为了避免意大利面式代码(全搅合在一起),我建议为每个部分定义他们该做的事情。我在图中用肩头说明。比如,views可以监听model触发的events,operations允许修改models,但models不允许引用operations和views。
傅小黑
 翻译得不错哦!

模型

例如一个原型Model是一个user对象。至少对象里有一个email,可能还有name和phone number。

在MOVE应用里,models只封装需要知道的内容。也就是说,除了getter和setter,还可能有比如“是不是用户的密码”,但他不带有存储数据到数据库,或操作API的功能。这些是operation的工作。

傅小黑
 翻译得不错哦!

Operations

一个常见的operation就是用户登录。里面有两个子操作:从用户获取email和password,从数据库数据加载user model并匹配password。

Operations是MOVE世界的工作狂。他负责修改models,显示正确的views,返回用户触发的events。在分工细化的应用里,所有子操作都是独立于母体运行,这就是为什么events向上的,而operations是向下的。(events负责召唤法式,operations负责通灵实体)。

而且更好玩的,可以把整个应用认为是一个operation,在程序boot时启动operation。他包含很多的子操作,他们之间是并行的。退出应用时,他们又都完成停止。

傅小黑
 翻译得不错哦!

视图

登录view负责显示一些文本框给用户。当用户点击login按钮,view派发一个loginAttempt(登录尝试)events,并带有用户填入的name和password。

所有用户可以看见和操作的事情都应该由view负责。他们不仅将应用的状态显示为用户可以理解的界面,也将用户操作简化为有意义的event。更重要的,view不能直接修改mode,他们只是触发event给operation,然后等待event反馈监听model改变的结果。

傅小黑
 翻译得不错哦!

Events

“loginAttempt” event是用户点击登录后event发送来了。然后,当登录操作完成,当前的user model(可能记录有该用户的信息了)会触发event通知应用model已经改变。

事件监听带给MOVE(和MVC)中model更新view和view更新model的可能,并且不是直接操作。这是高超的抽象技术,允许组建之间相互组合但不影响彼此。

傅小黑
 翻译得不错哦!

为什么要这样?

我不希望被误解说MVC很差。过去几十年为大型结构化应用中证明他是异常成功的。然而,新的编程技术流行起来。没有闭包,事件绑定冗长乏味;没有deffreables(deffreds 或 promises,即延迟操作),把单独的操作看作具有自身自责的对象是没什么意义的(无法被反复调用)。

再说一次:MVC非常出色,但是他是几十年的旧技术了。MOVE只是利用现在新工具下的一个技术更新。

PS:我不是第一个这样想的人,如果你喜欢MOVE这个想法,可以检出objectifyinteractions来试试添加一些MOVE在MVC应用中。也可以让我知道别的MOVE应用。

PPS:本文已经被翻译成日语两次:d.hatena.ne.jpblog.neo.jp。还有俄罗斯语西班牙语

译者注:旧闻一篇,附上CSDN的专业翻译:http://www.csdn.net/article/2012-07-09/2807210

傅小黑
 翻译得不错哦!
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们
评论(8)
Ctrl/CMD+Enter

哈哈,收下了,怎么都觉得 zTree 和这个很接近呀,下一步重构时也打算朝这个方向前进的。。
真是经典好文啊!
Operations和Events可以合并成Presentation,称为MVP模式
炒概念么。
Operations 节应该是召唤法师而不是法式吧?
你是在说ASP.NET么? 事件驱动的,虽然不如楼主说的这么完善分离
http://news.cnblogs.com/n/148762/
和我现在的前端SEED理念很接近
顶部