DDD应用服务领域模型查看模型映射

Posted

技术标签:

【中文标题】DDD应用服务领域模型查看模型映射【英文标题】:DDD Application Service Domain Model to View Model Mapping 【发布时间】:2015-11-14 15:10:11 【问题描述】:

我对应用程序服务的理解是它们将域和用户界面联系在一起。换句话说,它们服务于控制器以在域上执行操作。

我的应用程序中有以下项目布局:

域核心 基础设施 服务接口 网页界面 视图模型 观看次数 控制器 服务(应用服务)

我的Service Interfaces 位于Web UI 项目之外。然后在Web UI项目中实现Services下的服务接口。

但是,这种结构有点缺陷,当我们将其付诸实践时会产生循环依赖。我尝试遵循此链接中的架构:https://www.develop.com/onionarchitecture

对于给定的服务,我想传入视图模型,基于视图模型在域上执行操作,然后返回一个更新的视图模型。这种做法有错吗?

应用服务本质上是以视图模型为参数,根据需要更新领域和视图模型中的一些细节,然后返回视图模型,我的理解是否正确?

或者

应用服务是否只处理 c# 数据类型和域模型作为参数并返回相同的数据类型?换句话说,不会在视图模型中获取或设置任何信息。实际上并不知道视图模型存在。

我只需要澄清一下严格的 DDD 方法中的最佳方法是什么。

【问题讨论】:

应用程序服务通常不存在于表示(UI)层,有一个应用程序层用于此目的。 我是为这些服务实现创建一个不同的项目还是将它们放在我的接口所在的服务下? 你可以把所有的东西放在一个项目中,只要你为每个组件/层指定一个目录。 【参考方案1】:

回答您的问题: 是的,你是对的。对于 MVC 应用程序,您可以设计接受和返回 ViewModel 的层并在内部使用 Domain 操作

解决方案结构的好例子是由 Dino Esposito here 制作的。我将我的项目采用了这种结构,它变得非常清晰。我的看法是,onion architecture 对于中小型项目来说过于复杂了。

【讨论】:

以上是关于DDD应用服务领域模型查看模型映射的主要内容,如果未能解决你的问题,请参考以下文章

DDD专栏4:DDD如何保护领域模型

DDD领域模型贫血模型充血模型概念总结

DDD领域模型贫血模型充血模型概念总结

DDD的理解

如何用事件风暴构建领域模型?

如何用事件风暴构建领域模型?