2016-11-08 80 views
10

我们公司一直在使用MVP模式开发Android应用程序。使用MVP,我们将所有业务逻辑放在演示者和活动/片段内,然后在从演示者接收事件回调时负责视图更新。MVVM中的Activity/Fragment和ViewModel应该做些什么

现在,我们决定尝试使用Android Databinding的MVVM。看起来,通过MVVM,我们可以将所有业务逻辑放入ViewModel中(就像MVP中的Presenter一样),并且还可以在一个对象中通知视图(数据模型的任何更改)。

但是,这在我们脑海中提出了问题,我们应该留给活动/片段来处理什么?由于我们采用MVP模式来避免脂肪活动/片段。我们不希望有苗条活动/片段,然后胖视图模型

我们认为我们可以留下来是由活动处理/片段至今

  • 请求/检查许可
  • 访问上下文
  • 访问资源

每校,注释或建议值得欢迎,因为我对MVVM相当陌生,即使它看起来与MVP相似。

谢谢。

多一点的问题

是否有可能和好的做法MVVM与听者(如MVP)相结合?例如

public class MainActivityViewModel extends BaseObservable { 

    MainActivityViewModelListener listener; 
    User user; 

    public void setMainActivityViewModelListener(MainActivityViewModelListener listener) { 
     this.listener = listener; 
    } 

    public void refreshUser(View v) { 
     // some user update via Internet 
     notifyPropertyChanged(BR.userAlias); 

     if (listener != null) { 
      listener.onUserRefreshed(user); 
     } 
    } 

    @Bindable 
    public void getUserAlias() { 
     return user.getAlias(); 
    } 
} 

public interface MainActivityViewModelListener { 
    void onUserRefreshed(User user); 
} 

public class MainActivity implements MainActivityViewModelListener { 

    MainActivityBinding binding; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     binding = DataBindingUtil.setContentView(R.layout.main_activity); 


     MainActivityViewModel viewModel = new MainActivityViewModel(); 
     viewModel.setMainActivityViewModelListener(this); 
     binding.setMainActivityViewModel(viewModel); 
    } 

    @Override 
    public void onUserRefreshed(User user) { 
     // do some update 
    } 
} 

回答

5

是的,你可以在你的ViewModel所有的业务逻辑,这里有一些我本人来说如下学习MVVM

Approaching Android with MVVM
https://github.com/ivacf/archi
MVVM on Android: What You Need to Know

可以提链接ViewModel中的所有监听器以及您的模型将包含的数据。

ViewModel改变一些内容并通知绑定框架内容已经改变。

模型 - 包含业务和验证逻辑数据模型
视图 - 定义结构,布局和在屏幕上的图的外观
视图模型 - 徒的视图和模型之间的链路,处理任何 视图逻辑

enter image description here

reference

+0

+ 1 Github链接。到目前为止,我经历了几个教程并尝试一个实现示例,这个项目示例将会有所帮助! –

+0

你也可以参考[this](http://stackoverflow.com/a/40479052/3134215)了解更多。 –

+0

嘿! @RaviRupareliya,片段交易和动画应该在活动上完成? –

0

的,你可以使用接口的听众里面MVVM就像你在做MVP你的问题的答案?是肯定的,但模式稍有不同 ü提到

public interface MainActivityViewModelListener { 
void onUserRefreshed(User user); 

是OK的MVP型设计的代码,但对于MVVM你应该使用正确的观察员注册和注销模式包括通知观察员。

在mvp中,我们直接调用一个接口函数,但mvvm中的观察者模式与这些简单的接口完全不同。观察者模式涉及客户类的主题注册。

,如果你想MVVM工程究竟是如何在这里看到 https://github.com/saksham24/Android-Firebase-Mvp-Mvc-Mvvm-chat

这是一个简单的应用程序具有相同的功能,但写在三种不同的格式给MVP MVVM和MVC之间的差异有清晰的概念