当前访客身份:游客 [ 登录 | 加入开源中国 ]

技术翻译

已有文章 1516
当前位置: 译文列表 » Web/WAP应用开发 , 投递原文

MVC 已死,是时候用 MOVE 了

英文原文:MVC is dead, it's time to MOVE on.

标签: <无>
0人收藏此文章, lidashuang 推荐于 1年前 (共 7 段, 翻译完成于 03-18) (7评)

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

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

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

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

傅小黑
傅小黑
翻译于 1年前

2人顶

 翻译的不错哦!

概述

Architecture of a MOVE app

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

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

1人顶

 翻译的不错哦!

模型

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

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

傅小黑
傅小黑
翻译于 1年前

1人顶

 翻译的不错哦!

Operations

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

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

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

傅小黑
傅小黑
翻译于 1年前

1人顶

 翻译的不错哦!

视图

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

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

傅小黑
傅小黑
翻译于 1年前

1人顶

 翻译的不错哦!

其它翻译版本(1)

Events

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

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

傅小黑
傅小黑
翻译于 1年前

1人顶

 翻译的不错哦!

为什么要这样?

我不希望被误解说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

傅小黑
傅小黑
翻译于 1年前

1人顶

 翻译的不错哦!

回页面顶部发表评论 网友评论7

  • zTree
    zTree 发表于 2013-03-18 15:01
    哈哈,收下了,怎么都觉得 zTree 和这个很接近呀,下一步重构时也打算朝这个方向前进的。。
  • super0555
    super0555 发表于 2013-03-18 15:56
    真是经典好文啊!
  • alex-gu
    alex-gu 发表于 2013-03-18 16:13
    Operations和Events可以合并成Presentation,称为MVP模式
  • Ghost_
    Ghost_ 发表于 2013-03-19 11:43
    炒概念么。
  • everyx
    everyx 发表于 2013-03-27 08:55
    Operations 节应该是召唤法师而不是法式吧?
  • sikele
    sikele 发表于 2013-03-27 17:28
    你是在说ASP.NET么? 事件驱动的,虽然不如楼主说的这么完善分离
  • ueaner
    ueaner 发表于 2013-04-26 17:16
    http://news.cnblogs.com/n/148762/