.net 类型化HTTP客户端属于何处?

dwbf0jvd  于 2022-11-19  发布在  .NET
关注(0)|答案(1)|浏览(156)

我有一个应用程序,包含以下几层:

  • Web API -提供外部调用进入应用程序的访问点。
  • 基础结构-提供允许访问数据库的存储库。
  • 服务层-负责不同的用例(例如“将项目添加到购物车”)。
  • 域-包含具有业务逻辑的域对象。

您可以在下图中看到它们是如何相互参照的。
我想添加一个类型化的http客户端,以便从外部API获取某些信息。

应在哪个层/项目中创建类型化客户端?

  • 我目前的推理 *

我首先想到的是基础设施项目。但是由于基础设施指向服务层(需要来自API的数据),这意味着在API之上引入一个接口。这也意味着来自类型化客户端的响应对象必须在基础设施层中定义(这是它开始变得混乱的地方)。
如果是这种情况,则意味着必须满足以下两个条件之一:
A)服务层直接依赖于API响应,或者
B)类型化客户端必须将响应Map到服务层中定义的对象。
这意味着我可以引入一个依赖项,在这种情况下,我可能会把它全部放在服务层;或者我使类型化的客户端比类型化的客户端更重要,这真的感觉像是代码的味道。

nbewdwxp

nbewdwxp1#

关于分层的一些想法

根据您的定义:
基础结构-提供允许访问数据库的存储库。
服务层-负责不同的用例(例如“将项目添加到购物车”)。
它们都没有与第一方和/或第三方服务通信的责任。看起来你的基础设施层是一个 * 数据访问层 *(在其他传统的分层架构命名中),而服务层是 * 业务逻辑层 *。

放置位置

在这个小的迂回之后,让我们把注意力集中在你的问题上,在哪里放置类型化的客户端。你可以推理出任何一个层都可以是类型化客户端的好家。我建议根据以下几点来做决定:

  • 如果您有多个独立的类型化客户端,并且大多数业务逻辑只调用其中的一个,或者如果业务逻辑利用多个类型化客户端,但仅用于聚合它们的响应
  • 然后将其放置在感觉正确的位置,无论它们是在底层定义还是在中间层定义
  • 如果您的业务流程/工作流通常以特定顺序或管道方式利用多个类型的客户端(一个客户端的响应是另一个客户端请求的输入)
  • 然后在流程/工作流所在的同一层中定义它们,因为它们是相互连接的,您很可能希望避免其他层以错误的顺序使用它们或只使用部分内容

我希望我的指导也能适用于你的特殊情况:)

相关问题