技术开发 频道

MVC已死?开发者们是时候用MOVE了

        【IT168 评论】MVC是了不起的想法。你有模型——带有很好的内部独立状态,视图——内部处理UI,可控制器——可以处理.....控制器处理什么!我不是第一个注意到这个问题的人。你的MVC很可能在控制器里写了很多的代码,因为你也不知道该写在别的什么地方。

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

  概述

  我可以马上阐明模式细节,不过先看看这个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只是利用现在新工具下的一个技术更新。

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

0
相关文章