【问题标题】:Confusion about MVP pattern Android关于MVP模式Android的困惑
【发布时间】:2017-10-26 01:53:15
【问题描述】:

我是近 2.5 年的 Android 开发经验,在 Activity 类中编写所有代码很简单。

最近我发现了很多关于开发的好东西,它们会让开发者的生活变得很棒。

  1. 改造
  2. RxJava/RxAndroid
  3. 匕首
  4. MVP 模式
  5. 测试代码(单元测试)

我学到了什么(至少从项目开始)

  1. 改造

  2. RxJava/RxAndroid

我对 MVP 的困惑是什么

有人遵循代码风格

  • 视图(界面)
  • 演示者(界面)
  • PresenterImplementation(类)
  • 交互器(接口)
  • InteractorImplementation(类)

但是,我跟着

  • 视图(界面)
  • Presenter (Class) --- 实现 --> [ PresenterForView (Interface) & PresenterForInteractor (Interface) ]​​i>
  • PresenterForView (Interface) - 它适用于 View(例如,在 View 中单击登录按钮,即 Activity)。从 View 获取登录点击并提供给 Interactor
  • PresenterForInteractor (Interface) -- 它适用于 Interactor(例如,从 Interactor 获得响应,如成功,未能在 View 中显示,即 Activity强>)。
  • Interactor (Class):执行验证逻辑,调用 webservice(使用 Rxjava 和 Retrofit),返回 NoNetwork、TimeOut、Failure、Success 响应到 PresenterForInteractor

很多人说逻辑(if..else)应该只写在 Interactor 中。您的 View(Activity) ,Presenter 不应包含(If else 语句)应用程序逻辑。

Medium 上有很多教程,人们可以在其中做任何事情。 他们在 Presenter 中编写了一半的应用程序逻辑,其余在 Interactor

我尝试按照第一个选项在 Interactor

中编写每个应用登录

但在某些情况下,我对在哪里编写应用登录感到困惑

  • onActivityResult
  • onRequestPermission
  • 在 2nd Activity 中使用通过 Intent.putExtras 从 1st Activity 获得的数据(我总是在 2nd Activity 的 OnCreate() 中使用)

【问题讨论】:

  • 您能发布这些教程的链接吗?我现在只能说 MVP 在没有交互器的情况下完全可以正常工作。所以不用担心不用担心。

标签: android architecture mvp


【解决方案1】:

在两个用例上,

  • onActivityResult
  • onRequestPermission

我区分逻辑的方式是,如果该逻辑在 UI 上执行任何操作 - UI 逻辑(例如:更新文本、显示对话框、动画等)属于 Activity/Fragment。因为您只是在那个 Activity/Fragment 上,所以您可以立即调用它。

如果需要操作任何业务逻辑,例如:更新数据库、网络请求/响应等,可能需要通过 Presenter 调用。例如:

presenter.getDataFromTheWeb()

  • 在 2nd Activity 中使用通过 Intent.putExtras 从 1st Activity 获得的数据(我总是在 2nd Activity 的 OnCreate() 中使用)

要在 Activity/Fragment 中检索数据,请使用 getArgument(),它附加在其 Activity/Fragment 中。这样你在 Activity 类中检索数据才有意义。

总体而言,MVP 是一种解耦视图逻辑/应用程序逻辑和业务逻辑的好方法,还可以帮助您更轻松地测试您的应用程序。但是,使用正确的模式取决于您解决的特定问题。如果你的业务逻辑也很复杂,你需要Interactor模式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-17
    • 2020-03-06
    相关资源
    最近更新 更多