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

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

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

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

谢谢

最佳答案

我认为您使用 OrderManager 服务解决了问题。您真的不希望在 View 层中发生这种变化的累积。创建一个 PendingOrder 对象来累积您的 UnitOfWork 模式。放入内存存储或外部数据存储(可能是内存)。

这使您的 View 层保持清洁,并使测试更容易。

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

关于mvvm - 在 MVVM 中,长期运行的业务操作在哪里处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29350050/

相关文章:

c# - 绑定(bind)用户控件的属性 父用户控件的属性 wpf mvvm

c# - 具有PropertyChanged.Fody的Xamarin.Forms MasterDetailPage无法正常工作

asp.net-mvc - ASP.MVC 应用程序常量,最好/最优雅的方法是什么?

dependency-injection - 忍者 + "Error loading Ninject component ICache"

c# - Ninject 根据顶级项目获得不同实现的最佳实践

c# - MVVM、ObservableCollection 和 Reactive Extensions (Rx) 的跨线程访问无效

c# - 我应该在 Model 还是 ViewModel 上实现业务逻辑

java - 用于银行帐户/钱包余额更新用例的 Kafka 或 Java Locks,选择哪一个以获得更好的性能?

java - 如何实现应用程序故障转移?

java - Jersey 2.26 : Defining Custom Injection Annotation