mvc,mvp,mvvm架构理解 |青训营笔记
这是我参与「第四届青训营 」笔记创作活动的的第5天
自从2002年起,工程代码的发展从大锅乱炖时代,逐渐到最开始发起MVC架构,再到MVP演化,以及MVVM的项目解耦,三种架构的构建方式,三种模式各有怎样的优缺点,为什么这样演化,横向对比比较来分析三者的区别
MVC
M mode V view C controller
MVC的实现方式有很多种,但是基本的思路大致相同,view直接与用户交互,将用户的操作通过event发送给controller,controller再通知model进行更改,最后model更新view层的数据,同时view层向model层查询数据。
MVC首次提出了将数据,交互,控制进行分层的概念,将代码规范化工程化。跨时代的提出代码构建的规则。
但是MVC中的view和model,view可以监听/观察model层的数据,model可以主动update view层的数据,两者之间相互关联,导致紧密的耦合,在一些情况下不好维护。因此在MVC的基础上,提出了MVP架构
MVP
M model V view P presenter
model和view与上文中MVC的架构基本一致,但不同于controller,Presenter接管了view监听以model handle等在MVC中由view与model直接耦合相接完成的功能,相较于mvc,mvp在架构上完成了解耦,presenter具有更高的管理权限,相较于mvc具有更好的可维护性,但是因view数据直接来源于presenter层,导致presenter直接持有了view层,并且调用view层的方法来实现,依旧需要手动更新,未解决此种情况,MVVM应运而生。
MVVM
M model V view VM view-model
相较于MVP这种管理响应模式,MVVM采用了双向绑定的形式,用datebingding来替代了presenter对view的持有。 但是双向绑定对于调试和错误定位带来了困难,虽然实现了完全的解耦,但是view层异常可能问题来源于双向绑定的model层,数据绑定使得bug传递,所以mvvm在解耦上是优秀的,在大型应用中,节约手动更新视图的过程,会使代码更高效。
具体使用哪种数据绑定格式,应当根据项目实际来决定