【问题标题】:Understanding application flow with MVVM使用 MVVM 了解应用程序流程
【发布时间】:2022-08-19 21:11:16
【问题描述】:

我很难理解如何在更复杂的应用程序中使用 MVVM。我能找到的所有示例都是非常基本的应用程序。

假设我有一个“包裹递送”应用程序。要执行交付,我必须执行 3 个步骤:

  1. 扫描包裹
  2. 输入包裹的任何损坏或问题
  3. 让收件人在设备上签名

    所有这些信息都在设备上得到验证,然后发送到后端。

    在 MVC 中,我会这样实现:

    DeliveryController 处理所有逻辑。这包括页面之间的导航、获取 API 数据以及在所有数据收集完毕后验证所有数据。

    控制器充当视图之间的“连接”,收集所有信息并将其组合在一起。

    但是这将如何在 MVVM 中完成呢?所有数据将汇集到哪里?我能找到的大多数 MVVM 实现都是这样的:

    在这种情况下,每个视图中输入的数据必须传递给下一个ViewModel,直到到达链的末尾。此时,SignatureViewModel 将进行验证并进行 API 调用。这看起来很奇怪,而且会变得非常混乱,因为数据只会“通过”多个ViewModels,只是为了将它放在链的末尾。

    我看到的另一个选择是每个 ViewModel 处理它自己的数据:

    例如,DamagesViewModel 将验证并发送它自己的视图句柄的数据。最大的问题是数据不会作为一个整体发送。在发送之前也不能对整个数据进行任何验证。

    我的最后一个想法是这样的:

    这添加了一个 DeliveryViewModel,其基本功能就像在 MVC 中的 DeliveryController 一样。它将处理下一个导航到哪个ViewModel,处理生成的 API 调用,并在输入数据后验证所有数据。

    对我(作为一个主要使用 MVC 的人)来说,最后一个选项似乎是最明智的。但我也觉得它可能会错过 MVVM 的重点。

    这通常如何在 MVVM 中完成?我真的很感激任何指示。非常感谢能够很好地解释这一点的文章的链接。

    此外,如果有人知道任何公开可用的存储库或项目中包含这种模式,我很乐意看到它们。

  • 您基本上是在问如何在 MVVM 的情况下将多个子视图组合/组合成一个视图模型?
  • @PeterCsala 是的,但我希望每个视图都有一个视图模型,但我也有适用于多个视图/视图模型的逻辑。将“组合”逻辑放在哪里是我的问题
  • ViewModel 层促进了分离和编排,但这并不意味着它应该独自容纳所有的业务逻辑。业务逻辑可以作为某种服务注入和重用。

标签: c# mvvm


【解决方案1】:

我在同样的事情上挣扎了很多。特别是因为我已经使用了很多 MVC。

我认为要考虑的最重要的事情是 MVVM 并不是要解决与 MVC 完全相同的问题。您仍然可以在此模式之外实现一个控制器来补充它。它还极大地改变了应用程序的总体设计。

我使用的一种方法是将控制器实现为可以在 VewModel 之间共享的单例。这个控制器可以通过依赖注入注入到 ViewModels 中。 然后,Viewmodel 可以例如订阅来自控制器的事件以进行更新。 但这是解决此问题的一种方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    • 2014-09-05
    • 2013-03-19
    • 1970-01-01
    相关资源
    最近更新 更多