在一个 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/