MVC、MVP、MVVM

MVC

MVC是有一定历史的架构了,它分为model-view-controller,它用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

最典型的MVC就是之前学习的jsp+servlet+javabean模式。

JavaBean作为模型,既可以作为数据模型来封装业务数据,又可以作为业务逻辑模型来包含应用的业务操作。其中,数据模型用来存储或传递业务数据,而业务逻辑模型接收到控制器传过来的模型更新请求后,执行特定的业务逻辑处理,然后返回相应的执行结果。

JSP作为表现层,负责提供页面为用户展示数据,提供相应的表单(Form)来用于用户的请求,并在适当的时候(点击按钮)向控制器发出请求来请求模型进行更新。

Serlvet作为控制器,用来接收用户提交的请求,然后获取请求中的数据,将之转换为业务模型需要的数据模型,然后调用业务模型相应的业务方法进行更新,同时根据业务执行结果来选择要返回的视图。

MVP

MVP 是从经典的模式MVC演变而来,它分为Model-View-Presenter,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据模型,View负责页面交互。

MVC-MVP区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会直接从Model中读取数据而不是通过 Controller。在MVC里,View是可以直接访问Model的!从而,View里会包含Model信息,不可避免的还要包括一些业务逻辑。 在MVC模型里,更关注的Model的不变,而同时有多个对Model的不同显示,即View。所以,在MVC模型里,Model不依赖于View,但是View是依赖于Model的。不仅如此,因为有一些业务逻辑在View里实现了,导致要更改View也是比较困难的,至少那些业务逻辑是无法重用的。虽然 MVC 中的 View 的确“可以”访问 Model,但是我们不建议在 View 中依赖 Model,而是要求尽可能把所有业务逻辑都放在 Controller 中处理,而 View 只和 Controller 交互。这么耦合性就降低了。

MVVM

MVVM也是从经典的模式MVC演变而来,它分为Model-View-ViewModel。View绑定到ViewModel,然后接受命令做出页面调整同时在向它请求一个动作。同样,ViewModel跟Model通讯,Model发生了数据改变通知页面调整同时ViewModel告诉它更新来响应UI请求。这样便使得为应用构建UI非常的容易。界面构建越容易,外观设计师就越容易创建一个漂亮的界面。同时,当UI和功能越来越松耦合的时候,功能的可测试性就越来越强。

MVP和MVVM相同点:他们的优势都是降低了系统的耦合性,但同样也保证了各个层的功能高聚合。架构设计清楚,功能明确之后对于团队协作也很有帮助——因为M层和V层低耦合,那么这两块的工作量完全可以分开。对于复用性也更有目标了——视图层一些基础的操作封装和各个视图层的组合,数据模型层可以用不同的视图层去展示和各个数据模型的组合。低耦合也更有利于单元化测试。

关于MVP和MVVM的区别:我在实现了两种模式之后发现他们应该是侧重的方向不一样,解决问题的目标是一致的,都是想尽量解耦Model层和View层,但是方式不一样。他们最大的不同是P层和VM层所扮演的角色,presenter主要是针对业务逻辑进行梳理将Model、View完全分离解耦,在Presenter层添加M层、V层的实例来处理业务逻辑。而ViewModel主要是针对视图状态和行为进行抽象和绑定,也是将V和M层分离解耦,但是VM层并不是按照对应的业务逻辑进行拆分,而是将V层和M层做一个关联关系的绑定——制定出一套绑定规则让他们去遵守,VM维护的是他们的沟通规则,比Presenter更“抽象”一些。比较好的VM层其实是可以抽象提炼出来的。比如Android的DataBinding Library,他制定出了一套规则,让使用者不需要知道他们(View、Model)是怎么关联的,也不用写VM层的具体实现,只需要按照规则写好View层和Model层的相关代码,DataBinding会自动生成关于VM的代码,这就很好的体现出他是一套“高级”的规则的“优越性”。对于一些代码“”控制欲“较强的人还是推荐MVP,如果是用官方DataBInding实现的MVVM在“控制”方面可能不是那么强,毕竟代码很多都是工具生成的。至于我看网上有些人建议的开发可以结合两者MVP和MVVM能更完美,可能是对代码量没要求、对代码控制欲较强的开发者来说更好吧,后面在具体应用中多体会体会这两种模式带来的更多感觉吧。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容