微信号:tuniutech

介绍:途牛技术中心官方平台

途牛原创 | 聊聊Android中的MVX实践

2016-04-14 16:50 途牛技术中心

一、MVC概述

1
 
 MVC 没有列入23种经典的设计模式之中,why

● MVC被视为一种复合模式,包含以下

(1)观察者模式——M变化,通知观察者(V)改变

(2)策略模式——对于M,C以不同的策略进行处理

(3)组合模式——V通常是由多层子View的组合


● MVC被视为一种框架模式,从复用角度来说

(1)MVC是宏观层面设计分工的复用

(2)设计模式是具体问题解决思路的复用


● MVP、MVVM被视为MVC框架模式的改进版本,这三者放在一起,我们戏称为MV“X

2
  MV“X”基本概念


M:Model —— 模型:数据存取、处理

V:View —— 视图:UI界面显示、交互

C: Controller——控制器:逻辑控制、处理

P: Presenter——引荐者:逻辑处理、视图更新

VM:ViewModel——视图模型:逻辑处理、双向绑定

3
 MVX框架模式的思想实质——“关注点分离”

● M、V、X职责分离,结构清晰


● 可复用性增强,各模块解耦,便于复用


● 可维护性增强,各模块独立发展,易于维护


二、 MVC、MVP、MVVM辨析
1
  MVC



2

       MVP


3
  MVVM


三、 MV“X”Android实践
1
 AndroidActivity角色——V or “X

● Activity 兼具V、“X”的功能

● 若Activity功能较简单时,可将页面布局Layout视为(V),Activity视为(X);若Activity功能较臃肿,宜将业务逻辑挪出作为Presenter(X),这时Activity只负责页面显示、事件接收,它充当的角色可视为(V)

● 2015 Google IO 大会带来的 Data Binding 库使得 Andr oid 开发者可以方便地实现 MVVM 框架模式。

● 目前的Android项目中主要的实践形式为MVP

2
Android MVP示例简略图

3
Android MVP示例三个角色

1. Model——SampleModel

SampleModel负责数据存取、处理, 与SampleActivity完全解耦


2. View——SampleActivity

扩展接口ISampleView。Presenter通过此接口刷新界面。

实现了降低耦合性、依赖于抽象的目标。


3.Presenter——SamplePresenter

  作为View和Model的桥梁。持有接口ISampleView的引用及SampleModel的引用。

4
Android MVP示例关键源码

public class SampleActivity extends Activity implements ISampleView {

  SamplePresenter mPresenter;

  ……

  protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    ……

    mPresenter = new SamplePresenter(this);

    mPresenter.loadSampleData();

    ……


  }


}


public class SamplePresenter {

  ISampleView mSampleView;

  SampleModel mSampleModel = new SampleModelImpl();

  ……

  public SamplePresenter(ISampleView viewInterface) {

    mSampleView = viewInterface;

  }


  public void loadSampleData() {

    ……

  }

  ……

}


四、小结

• MV“X”可看作是指导宏观层面设计分工的框架模式


• 采用MV“X”,职责分离,结构清晰,便于复用,易于维护


• MVX 实践不应该拘泥于形式,关键是把握关注分离的思想实质


参考文献:《Android 源码设计模式解析与实战》(何红辉,关爱民)



 
途牛技术中心 更多文章 「牛人讲堂」第二期:有腕儿就是这么任性——邓侃博士与你分享大数据实战精华! 牛人大讲堂第二期总结 ActiveMQ相关介绍及实践 有一群牛人,我们必须知道 产品中心基础知识培训开始啦!
猜您喜欢 Android 开机速度优化-----ART 预先优化 创业失败当事人 | 把创意当做机密 52岁程序员的感悟:编程要快还是要慢 你不懂技术,如何领导我们? 苹果新贵 Swift 之前世今生