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

时间:2015-03-30 15:22:23

标签: mvvm architecture dependency-injection repository-pattern unit-of-work

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

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

由于

1 个答案:

答案 0 :(得分:1)

我认为您使用OrderManager服务将其钉住了。您真的不希望在视图层中发生此更改的累积。创建一个PendingOrder对象以累积UnitOfWork模式。放入内存存储器或外部数据存储(可能是内存)。

这样可以保持视图层清洁,并使测试更容易。

它可以解决您的IOC /测试问题。单独测试您的PendingOrder代码,与您的UI无关。然后你可以模拟/存根它进行UI测试。