MVVM DDD 应用程序中的组合根

本文关键字:组合 DDD 应用程序 MVVM | 更新日期: 2023-09-27 18:33:07

所以,答案应该很简单:正如Mark Seemann在这里写的那样:

组合

根是应用程序中模块组合在一起的(最好(唯一位置。( ... )在 WPF 应用程序中,它是 Application.OnStartup 方法

不过,我不确定这种OnStartup方法。假设我们有一个由这些具有依赖项的项目组成的应用程序:

<- 应用服务 <- WPF 客户端(视图模型 PCL <- 带视图的可执行 WPF 客户端(

MVVM 模式表示业务逻辑应在 ViewModel 中进行。(编辑:啊,我用错话说了:/我的意思是:当你在类游戏中有业务逻辑(在域中(时,它有方法Move,如果移动完成游戏,则返回true-你不需要游戏中的游戏。您需要一个命令 - ViewModel 中的 MoveCommand 和 Game。视图应该只知道该命令(。视图应该只知道必须从哪个命令执行 ViewModel。所以基本上,View应该只知道ViewModel。有关域的知识在视图中毫无用处。

所以我的问题是:我应该采用哪种 MVVM 方法?

  • 我想保留最佳实践并在组合根中创建每个对象
  • 我想将我的业务对象放在视图模型中,而不是视图中

ViewModel优先(或MVVMC(是唯一可行的方法吗?

MVVM DDD 应用程序中的组合根

MVVM 模式表示业务逻辑应在 ViewModel 中进行。

这个是完全错误的。您从不将业务逻辑放入视图模型。ViewModel 是表示,因此此处仅包含表示逻辑(输入验证,控制何时显示或隐藏哪个元素,以及存在哪些命令供用户对特定事件执行或连接域对象,类似于您在 MVC 中的控制器操作中执行的操作(。

业务逻辑显然是域的一部分,永远不应离开域。

ViewModels 仅准备域(模型层;MVVM 的 M(的数据,以便视图轻松使用它。

我想保留最佳实践并在组合根中创建每个对象

Application.OnStartup仍然是执行此操作的正确位置,因为应用程序层(以 n 层术语表示(是唯一了解所有内容(ViewModels、模型、域和基础结构(的层,你可以在那里进行特定于应用程序的配置,例如,添加IUserRepository可能是桌面上的SqlServerUserRepository和 UWP 应用上的SqliteUserRepository, 因为SQL Server在那里不可用。