【发布时间】:2022-08-19 21:11:16
【问题描述】:
我很难理解如何在更复杂的应用程序中使用 MVVM。我能找到的所有示例都是非常基本的应用程序。
假设我有一个“包裹递送”应用程序。要执行交付,我必须执行 3 个步骤:
- 扫描包裹
- 输入包裹的任何损坏或问题
- 让收件人在设备上签名
所有这些信息都在设备上得到验证,然后发送到后端。
在 MVC 中,我会这样实现:
DeliveryController处理所有逻辑。这包括页面之间的导航、获取 API 数据以及在所有数据收集完毕后验证所有数据。控制器充当视图之间的“连接”,收集所有信息并将其组合在一起。
但是这将如何在 MVVM 中完成呢?所有数据将汇集到哪里?我能找到的大多数 MVVM 实现都是这样的:
在这种情况下,每个视图中输入的数据必须传递给下一个
ViewModel,直到到达链的末尾。此时,SignatureViewModel将进行验证并进行 API 调用。这看起来很奇怪,而且会变得非常混乱,因为数据只会“通过”多个ViewModels,只是为了将它放在链的末尾。我看到的另一个选择是每个 ViewModel 处理它自己的数据:
例如,
DamagesViewModel将验证并发送它自己的视图句柄的数据。最大的问题是数据不会作为一个整体发送。在发送之前也不能对整个数据进行任何验证。我的最后一个想法是这样的:
这添加了一个
DeliveryViewModel,其基本功能就像在 MVC 中的DeliveryController一样。它将处理下一个导航到哪个ViewModel,处理生成的 API 调用,并在输入数据后验证所有数据。对我(作为一个主要使用 MVC 的人)来说,最后一个选项似乎是最明智的。但我也觉得它可能会错过 MVVM 的重点。
这通常如何在 MVVM 中完成?我真的很感激任何指示。非常感谢能够很好地解释这一点的文章的链接。
此外,如果有人知道任何公开可用的存储库或项目中包含这种模式,我很乐意看到它们。
-
您基本上是在问如何在 MVVM 的情况下将多个子视图组合/组合成一个视图模型?
-
@PeterCsala 是的,但我希望每个视图都有一个视图模型,但我也有适用于多个视图/视图模型的逻辑。将“组合”逻辑放在哪里是我的问题
-
ViewModel 层促进了分离和编排,但这并不意味着它应该独自容纳所有的业务逻辑。业务逻辑可以作为某种服务注入和重用。