Mar*_*och 9 mvp android android-activity
我有MVP模式显示的项目列表.View是一个Activity(aka ItemsList).我想显示下一个Activity(也是MVP'ed,aka ItemDetails),点击项目的详细信息ItemsList.
模型ItemsList用来自Repository的数据.实际上它是RMVP.它看起来像这样:
|->Model<->Presenter<->View [ItemsList]
Repository<-|
|->Model<->Presenter<->View [ItemDetails]
Run Code Online (Sandbox Code Playgroud)
所以模型ItemsList已经知道了型号项目被点击了什么,所以我可以通过它从马上ItemsList到ItemDetails不从资源库中获取数据,从数据到模型再次/制图/制造新的模型ItemDetails等.
我应该如何在MVP中的活动之间传递数据(例如,哪个项目被点击)?
解决方案1
使用Intent传递这些数据(类似于此处讨论的那样),但......然后如何处理这些数据?你可以在活动(视图)中从Intent解压缩它,而你应该在MVP的另一端,即在模型中.你把它从View to the Presenter传递给Model吗?
但是,Model in ItemDetails不是从"MVP的下行"(来自Repository)创建的,而是来自"MVP的上层"(来自Presenter).
解决方案2
仅将已点击项目的ID传递给ItemDetailsView(类似于android10/Android-CleanArchitecture在UserDetailsActivity中使用字段提出的内容private int userId;这也是googlecodelabs的NoteDetailPresenter使用的内容)
但是可能有问题因为我可能有两个Repository实现:
ItemDetailsView(但它似乎过度设计),类似于android10/Android-CleanArchitecture在UserDetailsActivity中提出的字段private int userId;ItemsList在一个应用程序中,我使用了这两种方法以及第三个选项。在第三个选项中,我使用应用程序级缓存并将对象填充到那里,并将缓存键传递给新意图。这是解决方案 2 的变体,没有存储库缓存。我知道我只暂时需要缓存中的项目;因此,从缓存中删除该项目以防止内存泄漏非常重要。我通常喜欢第二种解决方案,因为我不必使对象可分割(可能有点懒)。我没有注意到任何方法的性能差异。
最后,我在传递视图模型时选择了解决方案 1(我的所有视图模型都是可分割的)。使用domian模型时的解决方案2(因为它们已经在数据库中,所以更容易传递密钥)。如果 domian 对象处于瞬态(尚未持久化的新域对象或状态可能与数据库不一致的域对象,即更改尚未持久化且活动因某种原因暂停),则使用缓存的解决方案 2
| 归档时间: |
|
| 查看次数: |
3454 次 |
| 最近记录: |