【问题标题】:How to access user data within service layer?如何在服务层访问用户数据?
【发布时间】:2021-09-03 05:44:15
【问题描述】:

我正在构建一个包含以下层的 Asp.Net Core 后端:

  1. API 层
  2. 数据访问层
  3. 服务层

服务层需要根据用户及其权限过滤结果。根据几篇文章,通过服务层内部的 HttpContext 访问用户不是一个好主意,因为它应该独立于表示层。我看到的唯一选择是让当前用户进入 api 控制器并将其传递给服务层。这是唯一的方法吗?我认为总是将用户传递到服务层非常乏味。我会很感激你对这个问题的一些想法。

【问题讨论】:

    标签: asp.net-mvc asp.net-core architecture


    【解决方案1】:

    您确实希望在 api 控制器(表示层)中获取用户数据并将其传递到服务层。它不仅可以让您的服务独立于 HTTP 上下文,还可以极大地提高代码的可测试性。

    这将允许您在异步上下文中使用您的服务,甚至将其推送到单独的容器/服务器中。

    从 HTTPContext 中获取内容在现代等同于全局变量。方便的?是的。有毒的?是的!最终会让你的应用程序变成一团泥吗?是的!坚持架构是您保持程序干净和无聊的方式。无聊的代码是好的代码。解决难题,而不是硬编码。

    【讨论】:

    • 谢谢,这完全有道理。但是,我通过传递额外的 2 个参数来污染我的所有服务调用。有没有更清洁的方法来做到这一点?
    • 这两个参数是什么?如果您需要用户数据,请使用用户对象,或者创建一个新的 DTO 对象,其中包含您需要的位。您甚至可以拥有一个实用函数,从 HTTPContext 中提取相关位并填充您的特定 DTO 以简化事情。不要将其视为“污染”,调用应反映实际完成服务调用所需的内容。这就是你如何让你的代码不受外部上下文影响,并且通常是可扩展的、可支持的和诚实的。如果你有很多参数,你可以考虑一个参数对象来封装它们。
    猜你喜欢
    • 2020-11-28
    • 2011-02-17
    • 1970-01-01
    • 2010-09-13
    • 2011-12-18
    • 2017-10-18
    • 2011-03-14
    • 2012-11-26
    • 1970-01-01
    相关资源
    最近更新 更多