MVP,MVVM

MVP全称是Model,View,Presenter

  • View层:视图层,如Activity,Fragment,View,Adapter等,专注于用户的交互。View层一般会持有Presenter层的引用,或者也可以通过依赖注入(如Dagger)的方式获得Presenter的实例。
  • Presenter层:逻辑控制层,用来隔离View层和Model层,如接收View层的网络数据加载请求,并分发给对应的Model处理,同时监听Model层的处理结果,最终将其反馈给View层,从而实现界面的刷新。
  • Model层:封装各种数据来源,如远程网络数据,本地数据库数据,对Presenter层提供简单易用的接口。
    MVP中View层和Model层并没有直接通信,而是通过中间人Presenter来间接通信;Presenter和View以及Model的交互都是通过接口进行的。通常View和Presenter是一对一的,当然,复杂的View可能需要多个Presenter来共同处理。
    MVC中Model层和View层是直接通信的,而且Controller是基于行为的,可以被多个View共享。
MVP开源实现

Android-Architecture

MVVM(Model-View-ViewModel)

相比MVP模式,MVVM将Presenter改为了ViewModel,同时实现View和ViewModel的双向绑定。View层的变化会自动导致ViewModel发生变化,ViewModel的数据变化也会自动实现View的刷新,

在Google I/O2015大会上,Android开发团队发布了官方的MVVM模式支持函数库Data Binding Library。Data Binding函数库的引入很简单,在使用到Data Binding的android module的build.gradle文件中加入下面的配置即可

android {
    dataBinding {
        enabled = true;
    }
}

Data Binding的布局以作为根布局标签,里面包含data和view两个标签,其中data标签用来实现数据绑定,view标签就是在没有使用Data Binding时这个页面的布局文件的根标签。

  • Data Binding表达式


    
        
    
    
        
        
    

  • 数据对象
public class User {
    public final String firstName;
    public final String lastName;
    public User(String firstName,String lastName){
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }
}
  • 数据绑定
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        setContentView(R.layout.main_activity);
        MainActivityBinding binding = DataBindingUtil.setContentView(this,R.layout.main_activity);
//        MainActivityBinding binding1 = MainActivityBinding.inflate(getLayoutInflater());
        // 如果在ListView或者RecyclerView的adapter中使用数据绑定,可以如下方式绑定
//        ListItemBinding binding = ListItemBinding.inflate(layoutInflater,viewGroup,false);
//        ListItemBinding binding = DataBindingUtil.inflate(layoutInflater,R.layout.list_item,viewGroup,false);
        User user = new User("Test","User");
        binding.setUser(user);
    }
}
  • 事件绑定


    
        
        
    
    
        
        
    

《Android高级进阶》第16章 MVP模式及其在Android中的实践
《Android高级进阶》第17章 MVVM模式及Android DataBinding实战

你可能感兴趣的:(MVP,MVVM)