DesignPattern

MVC && MVP && MVVM

MVC

  • Model && View && Controller
  • MVC也有很多版本,都是根据实际情况来确定的,MVC稍微一变动便成了MVP,MVC是三者里面约束最宽松的,M、V、C三者之前可根据自己的实际需求定义耦合关系
  • 最大的特点在于Model可以直接更新View,即对Model和View之间的联系不做要求,可以有联系,也可以无联系
  • View和Controller之间是直接联系的,即并不规定Controller和View之间应该通过Interface来交互

MVP

  • Model && View && Presenter
  • MVP是MVC的扩展版,MVP是MVC的子集,它规定Model和View之间一切的联系都要通过Presenter进行,而且Presenter和View、Model之间互相持有他们的接口
  • Model对应Android中的网络请求、数据库处理等,Model往往可以进行Unit Test;
  • Presenter是业务逻辑类,是一个Mediator
  • View就是对应的Activity

MVVM

  • Model && View && ViewModel
  • MVVM也相当于MVC的子集,它和MVP一样要求View和Model之间不可以有耦合,一切对View/Model的操作必须由中间件完成,但是MVVM最大的特点就是ViewModel和View之间不是通过接口互相控制的,而是通过数据进行控制/绑定,具体是指
    • MVP从很大程度上解耦了Model和View,最大程度上复用了Model和View,但是承载了具体业务逻辑的Presenter是很难复用的,这是因为它写死的接口
    • ViewModel的角色可以理解为观察者模式中的Observable,VM对V的更新操作可以是一个简单的notify,而如果想使用一个VM对V进行控制,只需要对VM进行一个register,所以从本质上来说,任何一个类型的View都可以绑定任意一个VM,而不必像MVP那样只能和特定接口类型的View绑定
    • 这样ViewModel每次notify View时,View自己对notify传过来的数据进行相应的更新试图操作,举个栗子:
    • View中有一个button,button的颜色是一个RGB(ARGB)值,然后notify传递过来的数据包(也许是一个Map/Dictionary)里取出对应的值,然后View自己刷新自己的页面
  • 这样让中间件(ViewModel)更加灵活,耦合也变成了数据上的耦合(这应该属于标记耦合吧,通过接口耦合应该是属于内容耦合)

Conclusion

  • 不管MVC、MVP、MVVM其实都是为了最大程度上的解耦、复用,实际应用中也往往会根据自己的需要去变动,理解Pattern的思想才是最重要的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值