【问题标题】:how to pass anonymous delegate to webapi/service如何将匿名委托传递给 webapi/service
【发布时间】:2015-10-09 17:32:30
【问题描述】:

我们有 2 种服务,例如业务逻辑层即服务 (WEBAPI) 和 DAL 即服务 (WEBAPI)。我们有与业务层交互的客户端,业务层与数据层(服务)交互。我们的 DAL 是独立于模式的,并且 DAL 层不包含 DTO 实体(类)。 DAL 从数据读取器中获取数据并转换为 Expando 对象并返回给 BLL,BLL 层将接收到的 Expando 对象转换为 DTO 对象。如果数据小于 500K,这种方法非常有效,但是由于大小或超时等原因,这种方法会失败。所以我在想有没有办法从 BLL 层传递 func 或委托给 DAL 服务层,这个 func 将在 DAL 层进行评估,我将在我的匿名委托/func 中将我的转换逻辑传递给实体,还有一些逻辑。我的问题是在架构上这可能不是最好的方法,但我想知道有没有办法将委托具有参数传递给另一个服务并在服务上下文中执行该委托。

【问题讨论】:

    标签: c# asp.net-web-api delegates


    【解决方案1】:

    您不能通过 WebAPI 原生支持的任何格式传递委托。可执行代码很难传送到另一台机器上。

    您需要通过其他方式解决此问题。也许您可以使用字符串识别方法(例如“FilterByGoldCustomerStatus”)并让服务器解释该字符串。

    从您提供的架构草图中,我不清楚为什么您需要通过基于 HTTP 的协议将 DAL 和 BLL 分开。也许您的 DAL 应该只是 BLL 使用的 DLL?!然后您可以轻松地传递委托和表达式树。

    坦率地说,架构看起来相当复杂(许多层、RPC 边界、expandos,...)。难道不能用更简单的方式来完成吗?!

    【讨论】:

    • 感谢 usr。我们正在为我们的应用程序使用微服务,我们将 BLL 和 DAL 层托管在不同的服务器中,即我们的 BLL 和 DAL 是单独的 WEB API 项目。我们将采用这种架构,因为我们希望拥有更少和独立的部署单元,如果 DAL 层发生变化,我将仅部署 DAL 服务而不部署 BLL 层,因为我的 DAL 是独立于模式的。这里有没有可以使用的 RPC 调用
    【解决方案2】:

    这个问题还没有回答。我有同样的问题,需要将委托从 UI 传递到 BL。假设对于 Kendo 网格分组、过滤、排序等,您不想从 DL 获取所有数据并将其传递给 BL,然后将其传递给 UI(服务器端)并在那里执行所需的操作。此外,由于未指定此要求并且是客户端,因此您无法为此目的创建修复查询。因为可能的成分太多了。 就性能和关注点分离而言,正确的架构是什么?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-07
      • 1970-01-01
      • 1970-01-01
      • 2014-11-19
      • 1970-01-01
      • 2012-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多