MVC和MVVM架构设计

一、MVC

1、M :是数据模型Model,负责处理数据,以及数据发生改变时发出通知(Notification、KVO),Model和View不能直接通信,这样会违背MVC设计模式。

2、V:是视图View,用来展示界面和用户进行交互。便于解耦,一般不会直接持有,或者操作数据层中的数据模型(通过action-target、delegate、block等方式解耦)。

3、C:是控制器Controller用来调节Model和View之间的交互,可以直接与Model和View进行通信,操作Model进行数据更新,刷新View。

优点:

View、Model低耦合,高复用,容易维护。

缺点:

controller的代码过于臃肿,如果view和model直接交互,会导致view、model之间的耦合性比较大,网络逻辑会加重controller的臃肿。

二、MVVM

Model-View-ViewModel

1、MVVM衍生于MVC,是MVC的一种演进,促进了UI代码和业务逻辑的分离,抽取Controller中的展示逻辑放到ViewModel里面。

2、M:数据模型model。

3、V:是View和Controller联系到一起,视为一个组件View。View和Controller都不能直接引用Model,可以引用视图模型ViewModel。ViewController尽量不要涉及业务逻辑,让ViewModel去做这些事情。ViewController只是一个中间人,负责接收View的事件、调用ViewModel的方法、响应ViewModel的变化。

4、VM:ViewModel负责封装业务逻辑、网络处理和数据缓存。实用ViewModel会增加一定的代码量,总体上减少了代码的复杂性,ViewModel之间可以有依赖。

注:View引用ViewModel,但不能反过来引用。如果VM跟V产生的耦合,不方便复用。一般不要在ViewModel中引入UIKit,任何视图本身的引用都不应该放在ViewModel中。ViewModel可以引用Model,但不能反过来。

优点:

低耦合、可复用、数据流向清晰,兼容MVC,便于代码移植,并且ViewModel可以拆分出来独立开发,方便测试。

缺点:

类会增多,ViewModel会越来越庞大,调用复杂度增加,双向绑定数据会导致问题调试变得困难。

总结:

MVVM其实相当于MVC变化而来。MVVM帮助MVC中的Controller瘦身,把一些逻辑代码和网络请求分离出去,不让Controller处理更多的东西,不会变得臃肿,MVVM和MVC都可以根据实际需求进行选择。

MVVM使用中,通常会使用双向绑定技术,使得Model变化时,ViewModel会自动更新,而ViewModel变化时,View也会自动变化。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 今天是11月30日,原本今天是满满的预产期,但在6天前,满满已经提前来到这个世界上了,一切来得太突然,快得我还没来...
    鸣行天下阅读 242评论 0 0
  • 今日哥哥到来,准备迎接! 先安置好住处,在我这里,然后下午去机场接站。 说实话,有点惦记着想把南越王博物馆看完,或...
    曼谷123阅读 229评论 0 0
  • 巷口的那家馄饨摊开好多年了。似乎出生起,那间小屋旁的一无槐树就一直温一等地矗产生巷口,一直被鲜香豆的香气缭绕着。我...
    a13a6762dd83阅读 352评论 0 0