繁体   English   中英

洋葱架构中的Dtos

[英]Dtos in Onion architecture

我的结构不正确。 我有一个webapi(具有所有控制器的项目),并且在核心项目(核心中的IServices类)中有我的IService层的引用,这里也是核心实体(域实体)。

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

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

如果返回域实体,则会针对多个服务进行多次查找以创建我的DTO。 例如,有衣服细节的客户(客户是一项服务,布料是另一项服务)。 这使得Ef核心可以翻转,因为每个服务方法都调用unitOfWork中的save。 示例我致电clothservice以获取可用于客户的价值,并再次更新clothservice。

如果我从IServices返回Dto:s,则需要从服务项目向DTO(在我的基础项目中)添加引用。 但是在这种情况下,我可以在该项目中调用其他服务并创建我的dto。 并在完成操作后致电一次save。

还是有另一种方法,每个webapi调用仅调用一次保存,或者我误解了dto,因此这类dto应该位于核心位置,因为它们不是真正的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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM