Android MVP。谁关心从对话框和外部应用程序启动和获取数据?

时间:2016-06-17 11:04:34

标签: android architecture mvp

我喜欢MVP概念,它对我组织代码有很大帮助,但每次当我需要从外部应用程序,对话框或请求权限获取结果时,我都面对同样的问题问题 - 架构的哪个部分应该关注这个?

例如,我们需要实现以下行为:

  • 点击按钮启动Google语音识别意图
  • 如果我们有多个结果 - 显示一个列表对话框并让用户访问 选择正确的变体
  • 用它做什么

所以,我们可以像这样做smth(也决定Fragment实现View,包含指向Presenter的链接并向其发送UI事件):

interface View {

    void showRecognizer();//2

    void showChooseDialog(List<String> items);//4

}

interface Presenter {

    void onButtonClick();//1

    void onRecognizerResult(List<String> results);//3

    void onResultChosen(String result);//5

}

好的,它会起作用,但我们遇到了一些问题:

  • 算法未完全封装 - 如果要更改它,则必须更改视图和演示者界面
  • 如果你在一个屏幕上有这样的算法,你的V&amp; P接口将是巨大的,难以阅读并理解
  • 查看比较聪明 聪明(V&amp; P都知道1,2,3,4,5序列), Presenter知道关于详细信息(对话框是一个实现细节,但它要求View启动它)
  • 算法不可重用!如何在其他屏幕上使用它?

所以,我想知道你对此的看法,如何做得更好(或者你认为这样可以)?

一般而言:开始对话和活动,请求权限,处理结果,从MVP和清洁架构的角度来看它的职责是什么?

鼓励任何想法或建议。请帮我澄清一下,谢谢。

1 个答案:

答案 0 :(得分:2)

关于MVP的5美分:

有些事情在View部分无法避免,例如开始和收听某些服务(例如:谷歌地图或地点)。

在做类似的事情时,我尝试在View中留下尽可能少的逻辑并通知Presenter任何交互(即使在那一刻没用),然后返回View所需的操作。

我的听众通常会触发演示者,而不是别的。然后,演示者触发视图以执行某些功能。这可能是一种矫枉过正,但我​​不希望我的主持人感到被遗忘。

在您的情况下,View会启动一个对话框和/或权限请求,但是演示者会命令它这样做。然后当结果返回时,将它们交给Presenter决定如何处理它(只要你不传递类似视图的Android内容)。

希望这有帮助。