【问题标题】:MVC vs MVP vs MVVM use casesMVC vs MVP vs MVVM 用例
【发布时间】:2019-06-04 00:20:04
【问题描述】:

我是一名 android 开发人员,我在我的应用程序中研究了所有这三种架构模式。此外,我还浏览了关于 stackoverflow 的几篇关于每篇文章的区别的文章。我的理解可能不是 100% 正确,但这是我目前所知道的简要情况。

  1. MVC - 控制器接收用户输入。控制器更新模型,然后告诉视图更新自己。

  2. MVP - View 获取用户输入并通知 Presenter。 Presenter 从 Model 获取数据,然后将其发送给 View。 Presenter 和 View 是一对一的关系。

  3. MVVM - View 接收用户输入。 ViewModel 从 Model 生成数据并输出数据流,任何订阅它的 View 都可以使用该数据。 View 和 ViewModel 具有一对多的关系。

问题是,在面试中,我多次被问到如何判断何时使用哪种模式。我认为面试官想知道的是应用程序的类型(如银行、电子商务等)及其适当的架构模式。或者至少有一些具体的解释,说明为什么我想在一个应用程序中使用 MCV,而在另一个应用程序中使用 MVP,而对于 MVVM 也是如此。

我的研究做得很好,但在互联网上找不到任何关于每种模式用例的正确答案。因此,请求请告诉我每个用例。

【问题讨论】:

  • Android 的构建不适合任何 MV* 模式,强制应用采用其中一种模式并不意味着应用会更好地运行。所以只需遵循官方网站的指导:developer.android.com/guide 虽然您可以使用其中一种 MV* 模式,但请记住先使用 Android,然后再使用模式
  • 我认为经典的 MVC 更像这样:用户输入由控制器接收。控制器更新模型。 View 观察模型的变化,并根据这些变化进行更新。此外,您在 MVP 中包含了一个控制器,我认为这是不正确的。
  • 我相信我只会说我更喜欢 mvvm 而不是其他所有东西,因为我有更多的经验,它需要更少的代码并得到官方谷歌库的支持,但对于新开发人员来说可能很难快速输入项目作为订阅不是那么容易遵循。对于大型 CRM 系统,我觉得 MVP 更好,因为它更加明确和严格。

标签: android model-view-controller mvvm architecture mvp


【解决方案1】:

据我所知:

MVC:Model View Controller 是 Android 开发的传统老方法。这是在 Android 开发刚开始时使用的,并且被狂热地使用了几年。当时,唯一广为人知的模式是 MVC。

因此,大多数旧应用程序都是从 MVC 开始的,但随着代码库的增加,控制器(活动/片段)变得庞大,其中包含大量业务逻辑和网络请求以及异步任务。因此,由于三者之间的高度依赖性,此类应用程序变得难以维护,并且非常难以测试。

因此,如果您的应用程序非常小,并且您不想遵循新的架构模式或者对使用 MVC 的架构模式了解为零,但我强烈建议您此时不要遵循 MVC。

MVP -> 随着 MVC 应用程序变得难以维护和测试,应用程序向 MVP 过渡。

Model View Presenter 试图解决 MVC 的问题,并将表示和业务逻辑转移到 Presenter。这里的演示者只是执行界面操作,并不知道它试图更新的视图。因此,由于演示者与控制器不同,我们可以轻松地测试演示者和模型。因此,我们获得了测试和维护的好处,但它也产生了一个问题,即现在演示者是聪明的。它们最终开始变得笨重。创建一个类似的问题。

同样在 android 中,应用需要维护应用状态。 MVC 和 MVP 并不是开箱即用的有状态保存功能,你需要编写额外的代码来维护状态。

另一方面,

MVVM 最受欢迎。模型视图 viewModel 是新的 android 架构。

你可以去详细了解一下:

https://developer.android.com/jetpack/docs/guide

网络连接存在于存储库中。因此,代码在您的片段或活动中更加清晰。所有三个组件都易于测试和维护。

最大的优势之一是您具有性能优势,因为它具有开箱即用的状态保存机制,因为 ViewModel 遵循单例模式,您可以通过使用 ViewProviders 并通过它创建实例来实现这一点。

当你说什么应用程序应该使用什么。如果应用程序规模庞大且复杂,强烈建议使用 MVVM,您还可以查看其他流行的架构组件,例如 MVI 和干净的架构(基于用例)。在我看来,应用产品类型不会改变架构要求。决定它的是复杂性和规模。您的安全要求会因产品而异。

【讨论】:

  • 可爱的答案。谢谢。
猜你喜欢
  • 2019-09-06
  • 2022-08-17
  • 2011-01-25
  • 1970-01-01
  • 2011-06-12
  • 2012-07-09
  • 2012-09-03
  • 2010-11-20
  • 2010-11-27
相关资源
最近更新 更多