在MVVM中,长时间运行的业务操作在哪里处理?

在MVVM中,长时间运行的业务操作在哪里处理?,mvvm,architecture,dependency-injection,repository-pattern,unit-of-work,Mvvm,Architecture,Dependency Injection,Repository Pattern,Unit Of Work,在MVVM LOB应用程序中,假设我有一个ViewModel,允许用户启动长期运行的业务流程,让我们假设它是创建订单的工作流。 当在ViewModel上执行CreateOrder命令时,如何在对象的整个生命周期中创建和管理UnitOfWork对象(DbContext)?ViewModel是否负责管理其生存期,将其传递给某个向导对话框服务,并最终将其提交到数据库?似乎违反了SRP。但是,如果ViewModel不管理此过程,谁/什么人管理?某种OrderManagerService 另外,IoC/依

在MVVM LOB应用程序中,假设我有一个ViewModel,允许用户启动长期运行的业务流程,让我们假设它是创建订单的工作流。 当在ViewModel上执行
CreateOrder
命令时,如何在对象的整个生命周期中创建和管理
UnitOfWork
对象(
DbContext
)?ViewModel是否负责管理其生存期,将其传递给某个向导对话框服务,并最终将其提交到数据库?似乎违反了SRP。但是,如果ViewModel不管理此过程,谁/什么人管理?某种
OrderManagerService

另外,IoC/依赖注入在这幅图中的位置如何?对于单元测试,显然我不希望ViewModel实例化一个新的耦合到数据库的
UnitOfWork
。但是,如果此业务流程仅在用户请求时启动,则在应用程序启动时,
UnitOfWork
显然无法注入ViewModel


谢谢

我想你在OrderManager服务上做到了。您确实不希望在视图图层中发生此更改的累积。创建PendingOrder对象以累积UnitOfWork模式。放入内存存储或外部数据存储(可能是内存)

这将保持视图层的干净,并使测试更容易


它解决了你的IOC/测试问题。独立于UI对PendingOrder代码进行单元测试。然后您可以模拟/存根它以进行UI测试。

从概念上讲,OrderManager和PendingOrder类是如何相互关联的?另外,如果我从我的viewmodel中删除UoW的创建,我不是已经将模拟UoW的问题从我的viewmodel转移到另一个服务中了吗?如果其他服务必须实例化UoW,我将如何对该服务进行单元测试?