MVP和Android处理生命周期事件,在哪里做UI逻辑

时间:2017-03-02 19:47:06

标签: android design-patterns mvp

我正在转换我的应用程序以使用MVP模式。关于正确使用MVP的开发人员之间存在争议,特别是在Android生命周期和UI相关逻辑的位置。没有争论应该在演示者和网络中完成任何硬逻辑

如果我需要为生命周期功能,onresume,onPause等做任何事情,我应该......

  1. 调用mPresenter.onResumeEvent();演示者然后进行呼叫。 IE contract.restoreState(); contract.connectToService()等。
    1. 在这里做我需要的所有逻辑而不涉及控制器。 IE restoreState,启动加载微调等等。
    2. 我将其视为onResume是一个事件。所有事件都应由演示者处理。反驳的论点是,我们不想编写“ping pongs”的代码,I.E。 OnResume - >演示者 - >一行函数,显示一个微调器(或接近该效果的东西)

      现在多一点颗粒。 让我说我开始我的活动,我需要显示错误或数据,具体取决于数据是否为空。

      我可以做..

      (presenter)
      contract.setupUi(data);
      

      然后

      (view)
      setupUi(Object data){
      if(data != null){
      //show data 
      }
      else{
      //show error
      }
      

      UI控制着从演示者那里唤起的状态。

      或者我能做到

      (presenter)
      if(data != null){
      contract.showUI(data);
      }
      else{
      contract.showError();
      }
      

      合同中有所有州。

      是否全部目标是让Presenter完全控制应用程序的所有内容并将视图视为完全愚蠢。或者它只是为了测试目的而将代码分开。或者两者兼而有之?

      回顾

      1. 我应该如何处理生命周期 - 将其视为一个事件或让它 查看就好了。
      2. 视图相关逻辑应该去哪里?让演示者弄清楚 什么是null以及要显示的UI。或者让视图处理它?<​​/ li>
      3. 我最重要的是什么?使用控制应用程序 演示者,单元测试,两者?

1 个答案:

答案 0 :(得分:1)

非常好的问题,但不幸的是,他们没有明确的答案。

归结为MVP(或任何其他MVx)不是特定的实现,而是高级架构模式,需要解释。

说,我回答你的问题:

  1. 我坚信UI逻辑根本不属于Activity / Fragment,因此MVx视图永远不应该知道生命周期事件。
  2. UI逻辑进入独立类,负责MVx视图。放置空检查的位置取决于此检查的目的:如果结果仅影响UI(例如显示/隐藏UI元素),则执行MVx视图中的检查;如果结果影响应用程序的流程(例如显示提示对话框,更改屏幕等),则在演示者中执行检查;如果两者 - 在演示者和视图中执行检查
  3. 您的整体重点应该是编写可维护的代码。可维护,首先是可读的。
  4. 再次 - 以上答案是恕我直言。

    您可能也对我撰写的这一系列帖子感兴趣:MVP and MVC Architectures in Android