Android中具有干净架构的mvvm和没有干净架构的mvvm有啥区别?

Posted

技术标签:

【中文标题】Android中具有干净架构的mvvm和没有干净架构的mvvm有啥区别?【英文标题】:What is difference between mvvm with clean architecture and mvvm without clean architecture in Android?Android中具有干净架构的mvvm和没有干净架构的mvvm有什么区别? 【发布时间】:2020-02-17 10:44:36 【问题描述】:

我正在学习 MVVM 和 Clean Architecture。然后我发现了一些关于 MVVM + Clean Architecture 的文章,但我仍然没有了解 mvvm with clean architecture 和 mvvm without clean architecture 之间的区别。这些东西有什么总结吗?谢谢。

【问题讨论】:

【参考方案1】:

干净的架构旨在分离各层。业务层、数据层和表示层将是独立的应用程序。因此,您将增加它们中的每一个的可重用性。 MVVM 作为设计模式应该在表示层中实现。表示层将与业务层(或领域层)交互,业务层将使用数据层来共享数据。

【讨论】:

那你如何连接 use sasese 和 mvvm layer 呢? mvvm 中的 "model" 与 "CA" 一起使用时代表什么【参考方案2】:

MVVM 只是presentation layer 中干净架构的一部分。它只是一组关于如何从 UseCase 显示数据的规则。

使用干净架构的好处之一是我们可以更改presentation layer 中的设计模式,而无需更改domain layer 或用例。

因此,例如,如果我们使用 let say MVI,然后更改为 MVVM,则可以轻松顺利地完成.. :)

【讨论】:

那你如何连接 use sasese 和 mvvm layer 呢? mvvm 中的 "model" 与 "CA" 一起使用时代表什么 @IronHide 我们可以通过简单地将 useCase 与 MVVM 层连接到 ViewModel 中。 MVVM(表示层)中的模型是用例的输出。当然,viewModel 代码中的实现取决于你如何返回 useCase 的输出。 好的有趣的想法,我在考虑使用用例代替模型,对我来说,用例不仅仅是单个动作,它是一系列动作(步骤)可能需要调用它的方法,所以对我来说,该模型是从一开始就使用的,而不是作为最终结果。 我猜你的意思是模型是简单的 DTO 用于用例交互而不是像纯 mvvm 模式那样建模?可惜 bob 叔叔在他的例子中没有使用 mvvm 如果 DTO 对你来说不够用,那么你可以在 viewModel 中将 DTO 模型转换为 UI 模型。而且我同意 UseCase 不应该对 UI 中的模型(MVVM)一无所知,因为 UseCase 只是给出了一个流程的输出。如果 useCase 没有输出,至少在处理完成时返回 void。【参考方案3】:

MVVM 只是一种管理您正在使用的任何架构的视图层的技术。

简洁架构是一种组织层间通信的方式。它们不是相互排斥的

具有干净架构的 MVVM 层 代码分为三个独立的层:

表示层 域层 数据层

表示层 在这里,与视图和动画相关的逻辑发生在这里。它使用 Model-View-ViewModel (MVVM),但您可以使用任何其他模式,例如 MVCMVP

【讨论】:

那你如何连接 use sasese 和 mvvm layer 呢? mvvm 中的“model”与“CA”一起使用时代表什么?【参考方案4】:

据我了解:

没有干净架构的 MVVM:

______________________________________________

UI
- - - - - - - - - - - - - - - - - - - - - - - 

Presenter/ViewModel        (Business Logic)
______________________________________________

Repository

DataSource
______________________________________________

具有简洁架构的 MVVM:

______________________________________________

UI
                                                Presentation Layer
Presenter/ViewModel        
______________________________________________

UseCases + Entity          (Business Logic)    Domain/Business Layer
______________________________________________

Repository
                                                Data Layer
DataSource
______________________________________________

【讨论】:

以上是关于Android中具有干净架构的mvvm和没有干净架构的mvvm有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

在洋葱、六边形或干净架构中,域模型是不是可以包含与数据库中的域模型不同的属性?

干净的架构 UseCases 与具有功能的控制器

清洁架构用例/领域层的相关性

android dataBinding详解

干净的架构。主持人的工作是啥?

在干净的架构中,如何进行验收测试?