作家
登录

前端MVC变形记

作者: 来源: 2017-07-25 12:05:03 阅读 我要评论

MVC是一种架构设计模式,它经由过程存眷点分别煤嶝?进应用法度榜样组织。在以前,MVC被大年夜量用于构建桌面和办事器端应用法度榜样,如今Web应用法度榜样的开辟已经越来越向传统应用软件开辟挨近,Web和应用之间的界线也进一步模糊。传统编程说话中的设计模式也在慢慢地融入Web前端开辟。因为前端开辟的情况特点,在经典MVC模式上也引申出了诸多MV*模式,被实现到各个Javascript框架中都有若干的衍变。在研究MV*模式和各框架的过程中,倒是“剪赓续、理还乱”:

  1. 为什么每个处所讲的MVC都不太一样?
  2. MVP、MVVM的出现是要解决什愦问题?
  3. 为什么竽暌剐人义正言辞的说“MVC在Web前端开辟中根本无法应用”?

带着十万个为什么去翻阅很多材料,然则看起来像view、model、controller、解耦、监听、通知、主动、被动、注册、绑定、衬着等各类术语的分列组合,像汪峰的歌词似的。本篇欲望用通俗易懂的方法阐述清跋扈一些关系,因为接触时光有限,英文浏览才能有限,可能会存在误会,迎接评论辩论和改┞俘。

MVC变形记

MVC汗青

我们应用的MVC框架是ER,实用于并能很便利地构建一个整站式的AJAX Web应用。供给精简、核心的action、model和view的抽象,使得构建RIA应用变得简单可行。在应用的过程中近距离地领会到异常多方面的优良的设计理念。也让我开端思虑各个角色的转型。

MVC最初是在研究Smalltalk-80(1979年)时代设计出来的,生怕没有一本书可以或许回到计算机石器时代介绍一下Smalltalk的代码是若何实现MVC的,不仅如斯,连想搞清跋扈当时的应用处景都很难了,都要追溯到80后出身以前的事了。然则当时的图形界面少之又少,施乐公司正在研发友爱的用户图形界面,以代替电脑屏幕上那些军人于千里之外的敕令行和DOS提示符。那时计算机世界寰宇混沌,浑然一体,然后出现了一个创世者,将实际世界抽象出模型形成model,将人机交互大年夜应用逻辑平分别形成view,然后就有了空气、水、鸡啊、蛋什么的。在1995年出版的《设计模式:可复竽暌姑面向对象软件的基本》对MVC进行了深刻的阐述,在推广应用方面发挥了重要感化。

MVC包含三类对象,将他们分别以进步灵活性和复竽暌姑性。

  • 模型model用于封装与应用法度榜样的营业逻辑相干的数据以及对数据的处理办法,会有一个或多个视图监听此模型。一旦模型的数据产生变更,模型精晓知有关的视图。
  • 视图view是它在屏幕上的表示,描述的是model的当缁ご态。当模型的数据产生变更,视图响应地获得刷新本身的机会。
  • 控制器controller定义用户界面对用户输入的响应方法,起到不合层面间的组织感化,用于控制应用法度榜样的流程,它处理用户的行动和数据model上的改变。 

起首,view和model是不知道彼此存在的,同MVP一样,将view和model清楚地分别开来。 其次,view是对viewmodel的外在显示,与viewmodel保持同步,viewmodel对象可以看作是view的高低文。view绑定到viewmodel的属性上,如不雅viewmodel中的属性值变更了,这些新值经由过程数据绑定会主动传递给view。反过来viewmodel会裸露model中的数据和特定状况给view。 所以,view不知道model的存在,viewmodel和model也发觉不到view。事实上,model也完全忽视viewmodel和view的存在。这是一个异常松散耦合的设计。

经典MVC模式

实线:办法调用 虚线:事宜通知

个中涉及两种设计模式:

  • view和model之间的不雅察者模式,view不雅察model,事先在此model上注册,以便view可以懂得在数据model上产生的改变。
  • view和controller之间的策略模式

一个策略是一个表述算法的对象,MVC许可在不改变视图外不雅的情况下改变视图对用户输入的响应方法。例如,你可能欲望改变视图对键盘的响应方法,或欲望应用弹出菜单而不是本来的敕令键方法。MVC将响应机制封装在controller对象中。存在着一个controller的类层次构造,使得可以便利地对原有的controller做恰当改变而创建新的controller。

view应用controller子类的实例来实现一个特定的响应策略。要实现不合的响应的策略只要用不合种类的controller实例调换即可。甚至可以在运行时刻经由过程改变view的controller来改变用户输入的响应方法。例如,一个view可以被禁止接收任何输入,只需给他一个忽视输入事宜的controller。

进化为MVP的切入点是修改controller-view的绑缚关系,为懂得决controller-view的绑缚关系,将进行改革,使view不仅拥有UI组件的构造,还拥有处理用户事宜的才能,如许就能将controller自力出来。为了对用户事宜进行同一治理,view只负责将用户产生的事宜传递给controller,由controller来同一处理,如许的好处是多个view可共用同一个controller。此时的controller也由组件级别上升到了应用级别,然而更新view的方法仍然与经典MVC一样:经由过程Presenter更新model,经由过程不雅察者模式更新view。

好吧,如不雅被上述谈吐绕昏了,请持续研读《设计模式:可复竽暌姑面向对象软件的基本》。

MVC for JAVASCRIPT

我们回想了经典的MVC,接下来讲到的MVC主如果在Javascript上的实现。

javascript MVC模式

源图

如图所示,view承接了部分controller的功能,负粜ウ理用户输入,然则不必懂得下一步做什么。它依附于一个controller为她做决定或处理用户事宜。事实上,前端的view已经具备了自力处理用户事宜的才能,如不雅每个事宜都要流经controller,势必增长复杂性。同时,view也可以宛转controller处理model的更改。model数据变更后通知view进行更新,显示给用户。这个过程是一个圆,一个轮回的过程。

 1/6    1 2 3 4 5 6 下一页 尾页

  推荐阅读

  安全理论:学习如何应对网络恐怖活动

【51CTO.com快译】关于收集恐怖晃荡的消息近期层出不穷。全世界正在遭受不合程度的收集恐怖主义,包含真正的恐>>>详细阅读


本文标题:前端MVC变形记

地址:http://www.17bianji.com/lsqh/36386.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)