【发布时间】:2021-11-23 20:22:06
【问题描述】:
我知道有数千篇关于它的文章,我阅读了其中很多,但我仍然不确定我的具体情况该怎么做。
我正在编写一个 .NET Core 5 应用程序并且有 3 个项目层:
- API - REST,与客户端代码交互,获取和返回 DTO。
- BLL - 业务逻辑 - 大部分代码都在这里。
- DAL - 存储库模式 => 调用 SQL Server 数据库。与实体一起使用。
我在我的 DAL 层中使用实体,然后将它们映射到 DTO 模型,这些模型在 API 中返回给 API 调用者。
如果我在 Google 中写“在哪个层从实体映射到 DTO?” 我得到答案:
在这种情况下,服务层将域实体映射到数据合同 (DTO)。
问题是我没有服务层,我不想创建它。
问题是,我应该在我的层结构中的哪个层进行从实体到 DTO 的映射?
在我的结构中,我想我可以在 2 个地方做到这一点(我不确定哪个更好以及为什么):
-
在 BLL 中 - 我可以将其映射到 DTO(使用
AutoMapper)并将 DTO 返回到 API 层,而不是返回实体。 -
在 API 中 - 从 BLL 接收实体,然后将其映射到 DTO(使用
AutoMapper或ResultFilter)并将其返回给 API 调用者。
【问题讨论】:
-
您不希望您的业务层依赖于数据层中的模型(实体)。所以,我想说你的存储库的主要目的是从数据层抽象出来,这样如果你决定以不同的方式构建你的数据库,你的业务逻辑就不会改变。
-
这是自以为是的,因此是题外话。但是,3 层架构已经过时了,转向更干净、更灵活的架构,比如洋葱架构
-
@Xerillio 我不太清楚你的意思,你的意思是在业务层做映射?
标签: c# .net-core architecture