Android MVC vs MVP vs MVVM用例

Android MVC vs MVP vs MVVM用例,android,model-view-controller,mvvm,architecture,mvp,Android,Model View Controller,Mvvm,Architecture,Mvp,我是一名android开发者,我在我的应用程序中研究过这三种架构模式。此外,我已经通过了关于stackoverflow的几个帖子,了解了每个帖子的不同之处。我的理解可能不是100%正确,但这就是我目前所知道的 MVC-控制器接收用户输入。控制器更新模型,然后通知视图更新自身 MVP-View获取用户输入并通知演示者。演示者从模型中获取数据,然后将其发送到视图。演示者和视图具有一对一的关系 MVVM-视图接收用户输入。ViewModel从模型生成数据,并输出数据流,任何订阅它的视图都可以使用该数据

我是一名android开发者,我在我的应用程序中研究过这三种架构模式。此外,我已经通过了关于stackoverflow的几个帖子,了解了每个帖子的不同之处。我的理解可能不是100%正确,但这就是我目前所知道的

  • MVC-控制器接收用户输入。控制器更新模型,然后通知视图更新自身

  • MVP-View获取用户输入并通知演示者。演示者从模型中获取数据,然后将其发送到视图。演示者和视图具有一对一的关系

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

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

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

    据我所知:

    MVC:模型视图控制器是Android开发的传统老方法。这是在Android开发刚刚开始时使用的,并在几年内被广泛使用。在这一时期,唯一广为人知的模式是MVC

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

    因此,如果您的应用程序非常小,并且您不想遵循新的体系结构模式,或者不了解使用MVC的模式,那么我强烈建议您在这段时间不要遵循MVC

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

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

    同样在android中,应用程序需要维护应用程序状态。MVC和MVP没有现成的状态保存功能,您需要为状态维护编写额外的代码

    另一方面,MVVM最受欢迎。模型视图视图模型是新的android架构

    您可以详细了解以下内容:

    网络连接位于存储库中。因此,代码在片段或活动中更干净。这三个组件都易于测试和维护

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


    当你说什么应用程序应该使用什么。如果应用程序规模巨大且复杂,则强烈建议使用MVVM,您还可以研究其他流行的体系结构组件,如MVI和clean体系结构(基于用例)。在我看来,应用程序产品类型不会改变体系结构需求。它的复杂性和规模决定了它。您的安全要求会根据产品的不同而有所变化。

    Android并不适合任何MV*模式,强制应用程序使用这些模式并不意味着应用程序会更好地工作。所以,只需遵循官方网站的指导:您可以使用一种MV*模式,但请记住先使用Android,然后再使用其他模式。我认为经典的MVC更像是这样:用户输入由控制器接收。控制器更新模型。视图观察模型的更改,并根据这些更改进行更新。另外,在MVP中包含一个控制器,我认为这是不对的。我认为我只想说我更喜欢mvvm,因为我对mvvm有更多的经验,它需要更少的代码,并得到官方的google LIB的支持,但对于一个新开发人员来说,很难快速进入项目,因为订阅并不那么容易。对于大型CRM系统,我觉得MVP更好,因为它更明确、更严格。回答很好。谢谢