gpt4 book ai didi

c# - 使用 DTOS 从 Repository 获取数据到服务层

转载 作者:行者123 更新时间:2023-11-30 17:27:50 25 4
gpt4 key购买 nike

我正在学习 ASP.NET 存储库模式。我做了一些研究,但找不到正确的答案。

我的 DAL 上有一个数据库实体 Employee,它有许多列。
我有 EmployeeRepository 负责使用 DBContext 查询数据。

现在我的服务层上有 EmployeeService,它需要为员工返回一个 DTO,也就是说,它只有几个字段。(名字、姓氏、出生日期)。

现在,如果我从 EmployeeRepository 获取员工列表作为 IQueryable,并在我的服务层上选择它们作为 EmployeeDTO,我将通过启用对数据库的服务层访问来违反规则。

如果没有,那么EmployeeRepository会将每个员工的所有数据作为列表返回给服务层,这样服务层就只选择几个字段来创建EmployeeDTO。但是在这种方法中,我将加载所有不需要的数据。

我想知道是否有人有建议。

亲切的问候,

最佳答案

当我开始学习时,我也有同样的困惑。

Now, If I get the list of Employees from the EmployeeRepository as IQueryable, and select them as EmployeeDTO on my service layer, I would violate the rule by enabling Service Layer accessing to the database.



你的理解是正确的。存储库不应公开 IQueryable,而应仅返回数据。

If not, then EmployeeRepository will return all the data for each employee to the service layer as a list, so that the service layer selects only a few fields to create EmployeeDTO. But in this approach, I will be loading all the data that I don't need.



这实际上是基于您的需要和您的应用程序需要。对于方法声明以及它们应该如何返回没有严格的规则。
从下面,我可以理解两件事“ 将每个员工的所有数据返回到服务层”。
  • 无论员工如何,您都将所有数据返回到服务层,例如。产品,然后您将获得员工所需的产品。
    如果是这种情况,则可以使用参数
  • 进行限制。
  • 或者您的意思是您要返回的对象属性。那是基于从存储库到服务层的 DTO。您可以根据需要定义自己的 DTO。为此,我的建议是,如果您可以为 Db 和 DTO 保留单独的对象,那么它会使您的系统复杂化并且维护起来会很困难。当您向用户公开数据时,请保留必要的单独对象。

  • 示例实现
    Dotnet-Repository-Pattern-Template-With-Unit-Of-Work

    在这个例子中,使用了三层。
  • Api - 向用户公开数据
  • BL - 服务层 - 处理所有业务逻辑并处理 CRUD 的存储库
  • 持久性 - 处理持久性 - 封装大型/复杂查询。
  • 关于c# - 使用 DTOS 从 Repository 获取数据到服务层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54296387/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com