MVP在Android中的优势

时间:2016-11-23 13:45:30

标签: android mvp

我是android开发的新手。我想在我的项目中实现MVP但我不知道使用MVP有什么好处所以请告诉我在Android中使用MVP有什么好处。

6 个答案:

答案 0 :(得分:18)

我认为你的问题有两个部分:

  1. 一般MVP的优点
  2. Android中MVP的优势
  3. 实现MVP(或类似的MVC,MVVM,MVVC等架构模式)所带来的一般优势是:

    1. 明确分离组件之间的责任。这种分离可以更容易地理解和维护代码库。
    2. 模块化。模块化允许您例如切换到视图组件的不同实现,以便完全更改应用程序的UI,而所有其他组件保持不变。
    3. 更容易测试。由于组件之间有明确的边界,因此单独测试每个组件变得容易得多(例如通过模拟其他组件)。
    4. 以上是MVx在任何平台上的一般优势。这些也适用于Android,但是,恕我直言,在Android中,由于以下原因,以下MVx的收益更高:

      1. Android框架不鼓励开发人员编写干净的代码(至少可以这么说)。在这种情况下坚持一套明确的做法尤为重要。
      2. Android上的单元测试非常困难(在几个方面)。因此,如果您希望代码可以测试,那么在组件之间有明确的界限并且能够模拟它们是特别重要的。
      3. 如果您想在Android中关闭MVP路径,请查看以下资源:

答案 1 :(得分:1)

从技术上讲,其他优点包括可测试性,可维护性,可扩展性等。我在here上写了一篇完整的帖子。

但是正如你所说的你是Android的新手,我觉得在构建应用程序时使用架构模式的一个明显例子将帮助你更好地理解它的重要性:

假设一个应用程序有一个EditText字段,您输入一个地址,一个FIND按钮指向搜索结果页面。

如果您不使用MVP或任何其他适当的架构,则必须将所有内容放入ActivityFragment

findButton.setOnClickListener(new View.OnClickListener() {
    @Override    
    public void onClick(View view) {
        callTheNetworkSearchMethod();    }
});

现在,如果您想更改搜索地址的端点API,该怎么办?这样,您必须为所有内容更改Activity,即使对于端点API也是如此。但这是否合理?绝对不是。

在团队项目中,当主要开发人员审核您开发的功能时,她会发现整个Activity已更改为仅添加单个端点API更改。她必须完成扫描整个Activity只是为了弄清楚你只是改变了一个端点。此外,如果其他开发人员正在努力对Activity进行微小更改,您甚至可能会遇到冲突,并且必须花一些时间来解决它。

使用MVP可以实现上述所有以及许多其他增强功能,您只需编写:

findButton.setOnClickListener(new View.OnClickListener() {
    @Override    
    public void onClick(View view) {
        mPresenter.doWhenFindButtonIsClicked();    }
});

现在,如果您想在FIND按钮上进行点击时更改任何内容,您可以在 Presenter 中进行更改,视图保持不变。

这是使用架构模式的最重要方面之一,称为“关注点分离”。

如果您有兴趣了解MVP如何帮助安装Android项目,以及完整的示例应用,请查看我的MVP article

答案 2 :(得分:0)

  1. 如果你想知道android Mvp,Mvc,MvvM之间的区别请看领域的这个解释 https://academy.realm.io/posts/eric-maxwell-mvc-mvp-and-mvvm-on-android/

  2. 如果你想比较三种模式,请看这个奇迹的完整博客https://thinkmobiles.com/blog/mvp-vs-mvvm-android-patterns/

答案 3 :(得分:0)

YEAR首选演讲者:

  

如果您的UI很复杂,请考虑创建一个presenter类来处理UI修改。这可能是一项艰巨的任务,但是它可以使您的UI组件更易于测试。

我发现演示者更容易测试UI元素是否将真正显示/更新。像MVVM这样的模式要做的一件事是,您需要找到一种方法来测试视图实际上是否已订阅viewModel。当然,我们可以通过模拟观察者并显示事件发生时触发观察者来进行测试,但是我们如何知道开发人员不会忘记订阅viewmodel事件呢?在我看来,它还有更多工作需要测试。 mvp可以清楚地分离组件。

我问一个新项目时,此应用程序是否需要轮换?需要对哪种配置更改做出反应?如果不是很多,我只是选择MVP,因为单元测试对我来说比较容易。这可能是基于意见的。

答案 4 :(得分:0)

MVP或任何UI架构模式的优点是:

1)应用中的所有组件都可以轻松,独立地进行测试

2)可以对应用程序进行修改,而不必重构整个应用程序,因为与视图和应用程序逻辑相关的代码有明显的分离。

3)开发人员可以独立构建组件。

通过正确实施MVP,确保MVP不会影响性能并增加应用程序崩溃,有关更多信息,请参见http://www.zoftino.com/android-model-view-presenter-mvp-pattern-example

答案 5 :(得分:-1)

我使用不同的技术google rep for Android MVP: https://github.com/googlesamples/android-architecture

关于Presenter界面的文章: http://blog.karumi.com/interfaces-for-presenters-in-mvp-are-a-waste-of-time/