Mvvm 递归模型设计

Mvvm 递归模型设计,mvvm,model,mvp,Mvvm,Model,Mvp,我正在使用的软件使用了一个API,该API大致有以下结构:(为了解析符号,您可能需要阅读它两次:) 场景是一个包含一组时间间隔(持续时间)和事件(时间点)的过程 间隔由其开始和结束事件定义,指定开始和结束的时间(因此为持续时间)。间隔可以容纳任意数量的进程(如场景) 事件只是一个时间点 可以将事件放置在图形视图上以创建场景 正如您所看到的,这个模型是递归的,因为您可以将一个场景放在一个间隔中,而将另一个间隔无限地放在这个场景中 我的问题是:在“视图模型”-“演示者”-“视图”模式中,API对

我正在使用的软件使用了一个API,该API大致有以下结构:(为了解析符号,您可能需要阅读它两次:)

  • 场景是一个包含一组时间间隔(持续时间)和事件(时间点)的过程
  • 间隔由其开始和结束事件定义,指定开始和结束的时间(因此为持续时间)。间隔可以容纳任意数量的进程(如场景)
  • 事件只是一个时间点
可以将事件放置在图形视图上以创建场景

正如您所看到的,这个模型是递归的,因为您可以将一个场景放在一个间隔中,而将另一个间隔无限地放在这个场景中


我的问题是:在“视图模型”-“演示者”-“视图”模式中,API对象和视图模型对象的所有权关系应该是什么?我应该让API管理它自己的模型对象的所有权,比如事件和间隔,还是应该在实例化相应的视图模型对象时实例化它们?是否有最佳实践

您可能应该让API管理自己的域对象,并在项目中根据需要将这些对象映射到自定义模型或ViewModel对象

无论何时使用ViewModels,请记住MVVM或MVP是UI的模式,而不是业务逻辑的模式。演示者应该调用其他类(应该被视为MVVM/MVP/MVPVM模式之外的类)来执行其业务逻辑。听起来你提到的API提供了很多业务功能;理想情况下,您的模型将特定于您的应用程序,然后您将适当地将API的对象映射到您的模型对象

使用域对象(例如API提供的对象)作为模型是常见的,有时也是错误的,因此请小心,当您需要模型上API对象未提供的属性或属性时,您会陷入困境并感到困惑。非常愿意将API的对象映射到仅为应用程序或站点存在的自定义模型对象

当有疑问时,请回到,特别是单一责任原则


希望我正确地理解了您。

两个月前,我还不太确定,但我遵循了这条路线,软件运行得很好:)很高兴听到这个消息。