关系经济人类预测化学自然
中准网
自然科学
知识物理
化学生物
地理解释
预测理解
本质社会
人类现象
行为研究
经济政治
心理结构
关系指导
人文遗产

浅析MVCMVPMVVM框架实现

4月28日 吴梦筱投稿
  复杂的软件必须有清晰合理的架构,否则无法开发和维护。为了将业务和视图的实现代码分离,目前比较流行三种前端架构:MVC(ModelViewController)MVP(ModelViewPresenter)MVVM(ModelViewViewModel)
  Model为模型层,主要管理业务模型的数据和行为;View为展示层,其职责就是管理用户界面。
  三个架构模式目的都是为了解耦Model和View,主要不同点就在于三者实现解耦的方案不同。1、MVC
  一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。简单来说就是通过controller的控制去操作model层的数据,并且返回给view层展示,当用户出发事件的时候,view层会发送指令到controller层,接着controller去通知model层更新数据,model层更新完数据以后直接显示在view层上,这就是MVC的工作原理。如下图:
  代码实现如下:selectidanimaloptionvaluechickchickoptionoptionvaluehenhenoptionoptionvaluecockcockoptionselectspanidnamespansvoiceisspanidvoicespan。varM{voices:{chick:bibi,hen:gugu,cock:wowo},name:,voice:,change:function(name){this。this。voicethis。voices〔name〕;V。update();调用V},get:function(k){returnthis〔k〕;}};varV{init:function(){document。querySelector(animal)。onchangefunction(){C。set(this。value);调用C};},update:function(){document。querySelector(name)。textContentM。get(name);document。querySelector(voice)。textContentM。get(voice);}};varC{init:function(){V。init();},set:function(name){M。change(name);调用M}};C。init();
  以上代码很清晰分出M、V和C三个模块,V通过事件通知C控制M的变化,M变化后会调用V进行视图更新,整个流程是单向的。2、MVP
  MVP是从经典的模式MVC演变而来,它们的基本思想有相通的地ControllerPresenter负责逻辑的处理,Model提供数据,View负责显示。
  各部分之间的通信,都是双向的。;View与Model不发生联系,都通过Presenter传递;View非常薄,不部署任何业务逻辑,称为被动视图(PassiveView),即没有任何主动性,而Presenter非常厚,所有逻辑都部署在那里。如下图:
  代码实现如下:selectidanimaloptionvaluechickchickoptionoptionvaluehenhenoptionoptionvaluecockcockoptionselectspanidnamespanvoiceisspanidvoicespan。varM{voices:{chick:bibi,hen:gugu,cock:wowo},name:,voice:,change:function(name){this。this。voicethis。voices〔name〕;},get:function(k){returnthis〔k〕;}};varV{init:function(){document。querySelector(animal)。onchangefunction(){C。set(this。value);调用C};},update:function(kv){for(kinkv){document。querySelector(k)。textContentkv〔k〕;}}};varP{init:function(){V。init();调用V},set:function(name){M。change(name);调用MV。update({name:M。get(name),voice:M。get(voice)});调用V}};P。init();
  代码来看跟MVC差不太多,区别主要在于M和V没有直接交互,而是通过P来进行完全控制,所以P也被称为控制狂,任何交互上的事情都由很强的控制欲。3、MVVM
  MVVM采用双向绑定(databinding):View的变动,自动反映在ViewModel,反之亦然。AngularJS和Vue都采用这种模式,而React采用了单向数据流,属于MVP架构。
  要实现数据绑定,通常都采用发布者订阅者模式进行实现,但这部分工作如果由开发人员自己来写代码实现,其实还是挺复杂的,因此,各大平台都提供了各自的内部实现。比如Vue和AngularJS自身都实现了数据绑定,Android目前最主流的方案就是采用Jetpack,iOS最常用的方案则是结合ReactiveCocoa(RAC)实现。
  MVP和MVVM都是为了解决界面和数据的分离问题,两者只是采用了不同的实现方案。MVP之间的交互主要是通过接口实现的,其主要弊端就是需要编写大量接口。而MVVM则是通过数据绑定的方式实现交互,虽然其实现需要依赖具体的一些框架工具,但明显大大减少了开发者需要编写的代码量。
  代码实现如下:selectidanimaldatabindchange:doChangeoptionvaluechickchickoptionoptionvaluehenhenoptionoptionvaluecockcockoptionselectspandatabindnamespanvoiceisspandatabindvoicespan。varM{voices:{chick:bibi,hen:gugu,cock:wowo,},name:,voice:doChang:function(){M。namethis。M。voicethis。voices〔obj。name〕;}};varV{bindEvent:function(el,evt,func){el〔onevt〕M〔func〕();},updateText:function(el,text){el。textC}};varVM{init:function(rootSelector){this。observer();this。compiler(rootSelector);},paths:{},observer:function(){for(varkinM){(function(k){varnamek,valueM〔k〕;Object。defineProperty(M,name,{get:function(){},set:function(v){V。updateText(this。paths〔name〕,v);}});})(k);}},compiler:function(rootSelector){varbindsdocument。querySelector(rootSelector)。querySelectorAll(〔databind〕);for(vari0,lenbinds。i){varelbinds〔i〕;vardirectiveel。getAttribute(databind);if(directive。indexOf(:)1){事件指令vardirectivesdirective。split(:);varevtdirectives〔0〕,funcdirectives〔1〕;V。bindEvent(el,evt,func);}else{文本指令this。paths〔directive〕V。updateText(el,M〔directive〕);}}}};VM。init(content);
  MVCMVPMVVM的原理以及代码实现,文章到这里就差不多结束了。可能文章解析的不够全面,需更全面对架构的进阶。我们可以前往这里获取学习笔记方式,里面有对(架构的全方位解析大厂架构实战演练),展示如下部分截图:《Android架构学习》私信:手册获取!
  【私信手册获取】架构设计必备核心技术手册小结
  从MVC架构模式到MVVM,从分离展示层到展示模型层,经过几十年的发展和演变,MVC架构模式出现了各种各样的变种,并在不同的平台上有着自己的实现。
  MVCMVPMVVM都是根据不同的应用需求和应用环境逐步发展而来的,它们都有各自优缺点和适用环境。比如Web开发中因为要跨越网络通讯,如果使用MVP或者MVVM来实现代价是巨大的,因为目前来说网络数据很珍贵的资源。
投诉 评论 转载

原神3。0有三个UP池?圣遗物改版钟离甘雨复刻,到底是不是真随着原神2。8版本过半,相信不少玩家都已经在期待3。0版本了,毕竟3。0可是一个大版本的更新,届时将会开启须弥的新地图,并且迎来草系角色和草系元素反应的上线。关于3。0版……隋炀帝为何执意要攻打高句丽其实我们无悔了上千年在我国古代历史上两个短命的朝代,这两个朝代其实对于后世的贡献是非常巨大的,而且身后都是两个最为强大的政权,这两个政权就是秦朝和隋朝了。我们都知道这两个朝代都是经历了两代君王的统……中伏来了!最热最易生病的20天来了,不懂这些规矩要吃亏今年中伏一共有二十天,是一年最热的时候。冬病夏治,事半功倍!很多冬病都是夏天积累的。中伏,暑邪和湿邪交替,人体最容易落下病根,此时一定要多加注意。……女朋友专属!115元抢购俏皮兔变形DIY主机箱GAMEMAX游戏帝国俏皮兔变形DIY主机箱当前售价139元,3日开始115元,外形非常亮眼,很符合注重颜值的用户审美,有需要的小伙伴儿可以买起来了。配备俏皮兔磁吸硅胶耳……适合老人吃的水果都有哪些呢随着人们生活水平的不断提高,老年人对自身的健康也相应的越来越重视了。老人对膳食应有自己的特殊要求,那么,适合老人吃的水果都有哪些呢?1、老人适宜吃葡萄适宜吃葡萄。葡萄中含……给妈妈的一封信亲爱的妈妈:您好!这一周,老师布置了给妈妈的一封信,我心中暗喜,我内心闷闷不乐的一件事,今天终于有机会和您说了。每一次,我放学回到家,学习的时候,您就开始唠叨……胃病老人吃什么食物好胃病是长期饮食不规律等因素造成的,需要及时的进行治疗,不仅仅需要吃药,还需要长期的饮食调养,胃病老人吃什么食物好呢?10种食物别错过。1。牛奶牛奶不仅仅含有大量的营……养生故事铁棍山药的来历在河南温县的西部有个习俗,就是闺女坐月子时,娘家一定要送些山药,特别对那些身体虚弱产妇,有极大滋补作用。人们经常会熬山药小米粥,给产妇滋补。在古时候,温县当地有个大户人家……家有儿童的赶紧收藏条儿童安全成长法则幼稚园与校园危机事件,石破天惊般提醒了我们:孩子们并不是那么安全。实际上,关注儿童日常安全,不仅仅是防范坏人,爸爸妈妈们还有更多的日常生活盲角与重点需要关注。其实,无论你做了多……极限挑战一加Ace竞速版天玑8100MAX67瓦智慧闪充17屏幕6。59英寸天马微电子1080p,LCD挖孔屏,支持120赫兹刷新,最高240采样率,亮度典型值480nit,像素密度401,屏占比包含缺口83。9,手机重205g。……我眼中的美我和同学们背着书包踏进了公园的大门,开启了一学期一次的春游之旅。山上那玉兰花瓣边缘显现出土黄,那粉色的花瓣似一叶小舟在风中摇摆,那白色的花瓣犹如一位身着白色裙子的花仙子在风中翩……浅析MVCMVPMVVM框架实现复杂的软件必须有清晰合理的架构,否则无法开发和维护。为了将业务和视图的实现代码分离,目前比较流行三种前端架构:MVC(ModelViewController)MVP(Model……
世界女排3大攻手罕见同日登场!朱婷数据落后,意甲攻手都不高为情感而动,手下留情地表最强骁龙8Gen2?曝RedmiK60系列本月底发布支持远程查看360度无死角守护,70迈云台记录仪X200开售人到中年的尴尬境界分布式链路追踪技术监控数据从何而来?中国男篮教练换血!洋帅走马上任,杜锋体面谢幕,王治郅有望出山多地提高医保缴费年限,男性30年女性25年,这几类人影响最大癫痫治疗,饮食也是非常重要的一环许佳琪红毯造型来袭,湿发背头帅翻人,摆拍气场更是无人能及中国光学摇篮如何助夸父逐日?点燃我温暖你大结局一个意难平,2个悬念,高见鸿成大赢家
薏米粉可以加蜂蜜吗详解其几大常见的好处NASA2035年,将核动力火箭送往火星卫生服务站个人工作总结秘密花园找到开启心灵的钥匙,走出原生家庭的阴影爱情飞机鬼玺有几个鬼玺和青铜门什么关系一位让我敬佩的人作文600字个国学名句句句精粹开阔人生境界受如何帮助丈夫度过性生活危险期呢互动营销是怎么让琅琊榜火起来的300字作文爱唠叨的妈妈3款颜值高性能好的拍照手机推荐给你

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找菏泽德阳山西湖州宝鸡上海茂名内江三亚信阳长春北海西安安徽黄石烟台沧州湛江肇庆鹤壁六安韶关成都钦州