Android - 如何决定哪种架构更适合应用程序要求

4
我问这个问题是为了了解社区如何选择适合每个Android平台项目的正确架构,以便我可以更好地了解自己是否走在正确的道路上。 我已经是一名经验丰富的开发人员,实现了大部分 Android 的主要架构模式(例如:MVC、MVP、MVVM 等)。
我的问题是,作为 Android 开发人员或 Android 应用程序架构师,我如何根据应用程序要求在 MVC、MVP 和 MVVM 之间决定下一个应用程序应该使用哪种架构模式来构建应用程序。
提前感谢您的回答。

https://academy.realm.io/posts/eric-maxwell-mvc-mvp-and-mvvm-on-android/ - yoAlex5
1个回答

6

好的,这是我做的方式:

  • MVC: 如果你只使用简单的Activity和Fragment来构建应用程序,没有使用Dagger、没有使用任何DI框架、没有分层,我不建议你这么做。除非你的应用程序只有一个Activity和一个界面,否则你应该使用将应用程序分成层的架构。使用SDK中的类构建的老式Android MVC架构适用于真正非常小的项目。

  • MVP: 现在,MVP架构是最稳定的架构之一,实现它时不需要多思考,已经在各个地方得到了很好的定义。简而言之,你只需要你的UI(Fragment/Activity)、View接口将在该UI中实现并将从Presenter中用作回调的接口,Presenter接口、Presenter实现、Repositories、Repositories接口和UseCases或Interactors。MVP架构中的所有内容都非常明确,所有层之间都是分开的,通信机制通常通过回调接口完成。

  • MVVM: 这绝对是未来默认使用的架构(我认为最长需要1年)。我们通过MVVM架构摆脱了大量的样板代码。使用LiveData更简单地实现层之间的通信。在MVP中创建新屏幕时不需要定义500个组件。

  • 多模块架构 vs 单一模块架构: MVVM和MVP都可以实现多模块架构或单一模块架构。我认为这个选择比选择MVVM和MVP更重要。如果你知道你的应用程序将有一个庞大而复杂的业务逻辑,比如某种社交网络应用程序,那么你应该使用多模块架构,这将允许你将特性分成模块,构建时间(如果模块引用和依赖注入正确执行)将近似线性,并且这将帮助你与团队舒适地合作。如果你选择单一模块架构,请记住,随着添加新库和新特性,构建时间会增加。如果你知道项目不足以使用多模块架构,那么这是你正确的选择。并且你总是可以在MVP/MVVM架构下管理你的类,将单一模块项目转换为多模块项目。

我曾经参与过一些项目,在那里我首选多模块架构,因为我知道该项目将拥有很多特性。但我的第一个想法总是使用MVP架构、用Kotlin编写的单模块结构,如果你对代码进行良好的组织,你总是可以将你的项目转换为多模块架构。

MVVM同样很不错,但我从未在使用多模块架构的项目中使用过MVVM,我不确定在UI的xml中使用数据绑定是否会影响其他开发人员的工作。我仍需要尝试一下。

TL;DR: MVP是目前最好的选择,记得让所有的架构组件保持整洁,每个组件都有其接口和实现分离。MVVM肯定是未来,但我不会在大型多模块项目中使用它,如果您将其用于单个模块项目,那么完全没问题。

如果您想查看一些架构示例,请查看我的存储库:

http://www.github.com/4gus71n

如果您有任何其他问题,请让我知道。


1
非常感谢您就Android开发中使用的架构模式提供的见解。我相当确信MVP是在Android中使用的最稳定和成熟的架构模式!同时我也相当确信MVVM正在比MVP更受欢迎。 - AouledIssa
因此,你对我迄今为止的想法有什么看法:• 如果视图是被动的(它们作为模型的演示层,没有任何UI逻辑和非常少的模型操作),那么MVVM会更适合,因为在模型(业务层)中发生的更改会自动反映到视图中,而视图只显示数据并通过ViewModel与用户交互。• 如果应用程序在视图和业务逻辑之间有很多交互,我会选择MVP! - AouledIssa
1
是的,这是一个很好的思考方式。考虑整个验证类似表单的屏幕的过程。想象一下,你有一个屏幕,基本上是用户资料数据,你有用户的头像、资料名称、地址等等。使用MVVM,表单验证可以相对简单地检查非空字符串等内容。而使用MVP,则需要将这些验证逻辑编码到Presenter中。 - 4gus71n
1
但我总是试图从团队如何与架构设计一起工作的角度来考虑架构设计。MVVM在更改XML中的Databinding代码时可能会导致一些冲突,在更改ViewModel代码时可能会出现错误。在MVVM中,像Databinding与ViewModel之间的通信这样的许多事情都是“神奇地”完成的,如果您更改XML中的一行,则没有任何警告。 - 4gus71n
锋利!每种架构都有其优缺点。我个人主张根据 UI 和/或模型层的需求混合使用架构。这种选择可能会与团队产生冲突,但如果应用程序具有多模块特性,则绝对不会出现这种情况,因为每个模块可以根据需要利用最适合的架构。因此,如果模块非常小,则开发人员不会为了与整体架构保持一致而增加额外的复杂性。 - AouledIssa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接