洋葱架构中的 Dtos

Dtos in Onion architecture

我的结构有问题。 我有一个 webapi(包含所有控制器的项目)并且在核心项目(核心中的 IServices 类)中引用了我的 IService 层,这里也是核心实体(领域实体)。

我从 wepapi 项目调用我的 Iservices,并从域实体中得到对象的响应。

现在我的问题应该是服务 return 并接受域实体(普通客户)或 DTO:s(customerForUpdate,customerForCreate)。

如果我 return 域实体,我会针对多个服务进行多次查找以创建我的 DTO。带有布料详细信息的示例客户(客户是一种服务,布料是另一种服务)。这使得 Ef 核心翻转,因为每个服务方法都调用 unitOfWork 中的一个保存。示例我调用 clothservice 获取价值以供客户使用并再次更新 clothservice。

如果我从我的 IServices return Dto:s 我需要添加从服务项目到 DTO 的引用(在我的基础设施项目中)。但在这种情况下,我可以在这个项目中调用其他服务并创建我的 dto。完成后只需调用一次保存。

或者是否有另一种方法每次 webapi 调用只调用一次保存或者我误解了 dtos 这种 dtos 应该放在核心而不是因为它们不是真实的 dto:s?

按照洋葱架构,所有的依赖都应该在领域层,每一层都可以与自己的更高层进行通信。现在,重点是域层根本不应该访问域层和其他层,如基础设施,只能在 web 服务层或 UI 应该只能看到应用程序层,现在你的问题是修理它。与应用层分开一个层,其中应用层接口命名为(Application.Contracts) 在这一层中,除了您为应用层定义的接口外,您还可以在同一层上定义DTO。 然后,有了这个,你定义了你想为应用层定义的接口,它只与那些(DTO)一起工作,所以 web 服务层或 UI 层没有域层。

-Application
    StudentService
    TeacherService

-Application.Contracts
          --Interfaces
              IStudentService
              ITeacherService
          --DTO
              StudentListDto
              TeacherDto
-UI Or Web service layer
 //Only can work with Application.Contracts