android 中 MVP 的优势

Advantage of MVP in android

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

我google 代表 Android MVP 具有不同的技术: https://github.com/googlesamples/android-architecture

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

在我看来,您的问题分为两个部分:

  1. MVP 的总体优势
  2. Android
  3. 中 MVP 的优势

通过实施 MVP(或类似的架构模式,如 MVC、MVVM、MVVC 等)获得的一般优势是:

  1. 明确划分组件之间的职责。这种分离允许更容易理解和维护代码库。
  2. 模块化。模块化允许您例如切换到视图组件的不同实现以完全更改应用程序的 UI,而所有其他组件保持不变。
  3. 更容易测试。由于组件之间有明确定义的边界,因此隔离测试每个组件变得更加容易(例如通过模拟其他组件)。

以上是MVx在任何平台上的普遍优势。这些也适用于 Android,但是,恕我直言,在 Android 中,由于以下原因,跟随 MVx 的收益更高:

  1. Android 框架不鼓励开发人员编写干净的代码(至少可以这么说)。在这种情况下坚持一套明确的做法尤为重要。
  2. Android 上的单元测试太难了(在几个方面)。因此,如果您希望代码可测试,那么在组件之间有明确的界限并能够模拟它们就显得尤为重要。

如果您想在 Android 中走上 MVP 之路,请同时查看这些资源:

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

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

从技术上讲,正如其他人指出的那样,优点是可测试性、可维护性、可扩展性等。我已经在 here.

上写了一个完整的 post

但是正如您所说您是 android 的新手,我觉得在构建应用程序时使用架构模式的具体示例将帮助您更好地理解其重要性:

假设某个应用有一个 EditText 字段,您可以在其中输入地址,还有一个指向搜索结果页面的“查找”按钮。

如果您不使用 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();    }
});

现在,如果您想在单击“查找”按钮时更改任何内容,您可以在 PresenterView[=43= 中进行] 完好无损。

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

如果您想了解更多关于 MVP 如何帮助 android 项目以及完整的示例应用程序,请查看我的 MVP article

google's own words 首选主讲人:

If your UI is complex, consider creating a presenter class to handle UI modifications. This might be a laborious task, but it can make your UI components easier to test.

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

当我开始一个新项目时,我问,这个应用程序是否需要轮换更改?它需要对什么样的配置更改做出反应?如果不多,我就选择 MVP,因为单元测试对我来说更容易。这可能是基于意见的。

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

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

2) 无需重构整个应用程序即可修改应用程序,因为与视图和应用程序逻辑相关的代码有明确的分离。

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

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