【问题标题】:Android - How to decide which architecture fits better the application requirementsAndroid - 如何确定哪种架构更适合应用程序需求
【发布时间】:2018-12-15 21:38:24
【问题描述】:

我问这个问题是为了了解社区如何为 android 平台中的每个项目选择正确的架构,这样我就可以更好地了解我是否走在正确的道路上。 我已经是一名经验丰富的开发人员,并且我已经体验并实现了大多数 Android 的主要架构模式(即:MVC、MVP、MVVM ...)。

我的问题是,作为一名 Android 开发人员或 Android 应用程序架构师,我如何根据 MVC、MVP 和 MVVM 之间的应用程序需求来决定我应该基于哪种架构模式来构建我的下一个应用程序。

提前致谢。

【问题讨论】:

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


【解决方案1】:

好吧,这就是我的做法:

  • MVC:如果您只是在谈论在您的应用程序中使用简单明了的活动和片段,没有 Dagger,没有任何 DI,没有层,我不会在任何时候推荐这个。除非您的 App 只是一个 Activity 和一个屏幕,否则您应该始终使用将您的 App 分层的架构。仅使用 SDK 中的类构建的老式 Android MVC 架构不适合,除非您正在构建一个非常非常非常小的项目。

  • MVP:现在 MVP 架构是最稳定的架构之一,在实施时没有太多的第二次猜测,它已经在任何地方都得到了很好的定义。简而言之,您只需要您的 UI(片段/活动)、将在该 UI 中实现的 View 接口以及将用作 Presenter 的回调的接口、Presenter 的接口、Presenter 的实现、存储库、存储库接口和用例或交互器。 MVP 架构中的所有内容都定义得非常好,所有层都相互分离,通信机制通常通过回调接口完成。

  • MVVM:这绝对是未来默认使用的架构(我认为 1 年最高)。我们用 MVVM 架构摆脱了很多样板代码。通过使用 LiveData,层之间的通信要简单得多。在创建新屏幕时无需像在 MVP 中那样定义 500 个组件。

  • 多模块架构与单模块架构:MVVM 和 MVP 都可以实现多模块架构或单模块架构。我认为这个选择比在 MVVM 和 MVP 之间进行选择更重要。如果你知道你的 App 将有一个庞大而复杂的业务逻辑,比如说某种社交网络 App,那么你应该使用多模块架构,这将允许你将功能分成模块,构建时间(如果模块引用和依赖注入正确完成)将是线性的,它将帮助您与您的团队一起舒适地工作。如果您选择单模块架构,您需要记住,随着您添加新库和新功能,构建时间将会增加。如果您知道该项目对于多模块架构来说不够复杂,那么这是您正确的选择。如果您在 MVP/MVVM 架构下组织良好,您总是可以将您的单模块项目转变为多模块项目。

我曾参与过一些项目,我一开始就选择了多模块架构,因为我知道该项目将具有很多功能。但我的第一个想法始终是使用 MVP 架构,使用 Kotlin 的单模块,如果你的类组织良好,你总是可以将你的项目迁移到多模块架构。

MVVM 也非常好,但我从来没有在使用多模块架构和 MVVM 的项目中工作过,我不确定使用 Databinding 更改 UI 的 xml 是否会影响其他开发该项目的开发人员.我还需要尝试一下。

TL;DR:MVP 是目前最好的选择,记住要保持所有架构组件的整洁,每个组件的接口和实现都是分开的。 MVVM 绝对是未来,但我不会将它用于大型多模块项目,如果将它用于单个模块项目是完全可以的。

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

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

如果您有任何其他问题,请告诉我。

【讨论】:

  • 非常感谢您对 android 开发中使用的架构模式的见解。我非常确信 MVP 是 Android 中使用的最稳定、最成熟的架构模式!我也非常确信 MVVM 正在吸引 MVP。
  • 因此,到目前为止,您对我的想法有何看法: • 如果视图是被动的(它们用作模型的表示层,没有任何 UI 逻辑且很少有模型操作),那么 MVVM 会更适合因为模型(业务层)中发生的更改会自动反映到视图中,并且视图除了显示数据并通过 ViewModel 传达用户交互之外什么都不做。 • 如果应用程序在视图和业务逻辑之间有很多交互,我会选择 MVP!
  • 是的,这是一个很好的思考方式。想想验证类似表单的屏幕的整个过程。想象一下,您有一个基本上是用户个人资料数据的屏幕,您有用户的头像、个人资料名称、地址等。使用 MVVM 表单验证,检查非空字符串和类似的东西可以相当简单地完成。使用 MVP,您将不得不将这些验证编码到 Presenter 逻辑中。
  • 但我总是尝试从团队其他成员如何使用该架构来考虑架构设计。 MVVM 在更改 XML 中的数据绑定代码时可能会导致一些冲突,在更改 ViewModel 代码时会出现错误。 MVVM 中的很多东西,比如与 ViewModel 的数据绑定通信都是“神奇地”完成的,如果您更改 XML 中的一行,则不会出现任何警告。
  • 锋利!!!每种架构都有其优点和缺点。我本人提倡基于 UI 和/或模型层需求的混合架构。这种选择可能会导致与团队发生冲突,但如果应用程序具有多模块口味,则绝对不会,因为每个模块都可以根据需要利用最合适的架构。因此,如果模块尺寸非常小,那么开发人员就不会为了与整体架构保持一致而为功能增加额外的复杂性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多