在MVP模式中,适配器是否应该包含模型,或者演示者是否应该拥有模型并让适配器引用它?

时间:2016-06-23 20:44:28

标签: android android-adapter mvp presenter

目前我已经拥有它,以便适配器可以引用其中的所有模型。但让演示者只持有模型并且适配器可以简单地引用它们会更好吗?

例如:

public class Adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{

private Presenter presenter;

public Adapter(Presenter presenter){
    this. presenter = presenter;
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    Model m = presenter.getModels().get(position);
    // bind model to view holder
}

@Override
public int getItemCount() {
    return presenter.getModels().size();
}


}

这样,当Presenter获取更多模型时,只需在获取后调用getAdapter().notfiyDataSetChanged();

2 个答案:

答案 0 :(得分:5)

你可以用任何一种方式。有些人会说适配器是视图的一部分并尽可能地使它变得愚蠢,但是如果你做得对,让适配器保存数据绝对有好处。

例如,我使用带有泛型的抽象基础适配器,该泛型持有数据对象列表以驱动recyclerview。它为列表提供了所有标准的CRUD操作(添加,更新,删除,移动等)。这些方法还处理通知适配器的更改,因此我的客户端代码不必担心它。它只是将一个对象交给适配器或告诉它删除/更改一个,然后适配器处理其余的。

这里的一大好处是CRUD操作的重复样板代码量的大幅减少以及与recyclerviews交互的各个角色的数据集更改通知。如果你有一两个以上的回收视图,那么节省的费用会比盲目地遵守口头禅更加有利。

答案 1 :(得分:4)

通常,适配器被视为View的实现细节。

Presenter不应该知道View实现细节。

适配器的工作是保存一组项目并将其发布到视图。适配器不应该知道Presenter,模型,其他视图等。

适配器的数据流,据我所知:

模型 - &gt;演示者 - &gt;查看 - &gt;衔接子&GT; ItemView控件

控制流程相反,最好是跳过适配器。

随意在项目问题中提问。