Architecture DDD应用程序服务域模型以查看模型映射

Architecture DDD应用程序服务域模型以查看模型映射,architecture,domain-driven-design,onion-architecture,ddd-service,Architecture,Domain Driven Design,Onion Architecture,Ddd Service,我对应用程序服务的理解是,它们将域和用户界面连接在一起。换句话说,它们为控制器提供服务,在域上执行操作 我的应用程序中有以下项目布局: 域核 基础设施 服务接口 网络用户界面 视图模型 观点 控制器 服务(应用服务) 我的服务接口位于webui项目之外。然后在webui项目中,我实现了services下的服务接口 然而,这种结构有点缺陷,当我们将其付诸实践时,它会产生循环依赖。我试图遵循此链接中的架构: 对于给定的服务,我希望传入视图模型,根据视图模型在域上执行操作,然后返回更新的视图模

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

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

  • 域核
  • 基础设施
  • 服务接口
  • 网络用户界面
    • 视图模型
    • 观点
    • 控制器
    • 服务(应用服务)
我的
服务接口
位于
webui
项目之外。然后在
webui
项目中,我实现了
services
下的服务接口

然而,这种结构有点缺陷,当我们将其付诸实践时,它会产生循环依赖。我试图遵循此链接中的架构:

对于给定的服务,我希望传入视图模型,根据视图模型在域上执行操作,然后返回更新的视图模型。这种方法错了吗

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

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

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

回答您的问题: 是的,你说得对。对于MVC应用程序,您可以设计接收和返回ViewModels的层,并在其中使用域进行操作


Dino Esposito是溶液结构的一个很好的例子。我将我的项目应用到这个结构中,它变得非常清晰。我的观点是,这对于中小型项目来说过于复杂。

应用程序服务通常不在表示(UI)层,有一个应用程序层用于此目的。我是为这些服务实现创建一个不同的项目还是将它们放在服务下,我的接口在哪里?只要为每个组件/层指定一个目录,就可以将所有内容放在一个项目中。