我是一名 Android 开发人员,我在我的应用程序中研究了所有这三种架构模式。我还浏览了 stackoverflow 上的几篇文章,了解它们之间的差异。我的理解可能不是100%正确,但这是我到目前为止所知道的简要信息。
MVC - 控制器接收用户输入。控制器更新模型,然后告诉视图自行更新。
MVP - View 获取用户输入并通知 Presenter。 Presenter从Model中获取数据,然后发送给View。 Presenter 和 View 是一对一的关系。
MVVM - View 接收用户输入。 ViewModel 从 Model 生成数据并输出数据流,任何订阅它的 View 都可以使用该数据。 View 和 ViewModel 具有一对多关系。
问题是在面试中我多次被问到何时使用哪种模式的问题。我认为面试官想知道的是应用程序的类型(如银行、电子商务等)及其适当的架构模式。或者至少对为什么我想在一个应用程序中使用 MCV 而在另一个应用程序中使用 MVP 以及 MVVM 进行一些具体的解释。
我做了很好的研究,但在互联网上找不到任何讨论每种模式用例的正确答案。因此,请告诉我每个的用例。
据我所知:
MVC:模型视图控制器是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 遵循单例模式,您可以通过使用 ViewProvider 并通过它创建实例来实现这一点。
当你说什么应用程序应该使用什么时。如果应用程序规模庞大且复杂,强烈建议使用 MVVM,您还可以研究其他流行的架构组件,例如 MVI 和干净的架构(基于用例)。在我看来,应用程序产品类型不会改变架构要求。决定它的是复杂性和规模。您的安全要求会根据产品而变化。
从我的角度来看,每种架构都有其优点和缺点,所以你应该首先了解应用程序的用法,根据我的经验,我认为当你有网络数据并且必须从网络获取数据并更新时,MVVM 更好界面使用次数较多,不影响界面流畅度
另一方面,当我有大型功能和复杂的项目时,我更喜欢使用 MVC,您可以在下面的链接中找到此架构的一个非常好的示例,他将活动视为控制器,并将视图逻辑分开来处理视图,而模型包含不同的用例来处理业务逻辑。
下面的示例也清楚地解释了如何在基础 Activity 中使用和实现依赖注入,这样就不必在每次调用应用程序时都实现它。