首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.Net 6清洁架构为什么WebApi引用基础设施?

.Net 6清洁架构为什么WebApi引用基础设施?
EN

Stack Overflow用户
提问于 2022-09-30 16:03:28
回答 1查看 146关注 0票数 1

因此,我开始阅读有关清洁架构的内容,到目前为止,我可以看到,像这样的架构设计的全部目的是将关注点和应用程序的各个部分分离开来,以便实现更大的未来更改,比如更容易地切换到另一个ORM。

从我读过的文章来看,解决方案的WebAPI项目似乎应该引用应用程序和基础结构层。我明白为什么我们需要引用应用层,但是基础设施呢?

这使得WebAPI层(本质上是应用程序的入口点)依赖于基础设施层,这导致了紧密耦合的情况(至少在我的头脑中)

你能帮我理解一下背后的原因吗?如果对基础结构层进行更改,会发生什么情况。在这种情况下,它可能会破坏整个应用程序,因为入口点被破坏了,不是吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-30 18:01:41

根据一般经验规则,所有模块(而不是服务)的注册都是在表示层中完成的。

例如:

代码语言:javascript
复制
// Add services to the container.
builder.Services.AddApplicationServices();
builder.Services.AddInfrastructureServices(builder.Configuration);
builder.Services.AddWebUIServices();

这是因为表示有自己的额外层,比如日志记录、配置、错误处理等等,这些层应该在表示层中注册,因为它依赖于asp框架本身,而不是任何其他第三方库。

因此,从技术上讲,您不希望您的基础设施依赖于它是一个asp dotnet核心项目,这就是为什么我们尝试在表示层中注册与框架相关的内容的原因。

如果你真的想要的话,你可以把基础设施注册到应用程序服务注册中,这很好,但它扼杀了所有模块都将在一个地方注册的整个想法。

此外,有时只依赖于web本身的基础设施实现。例如,假设您有一个名为ICurrentUserService的接口,当您发送请求时,它的实现之一将是HttpCurrentUserService,并且该服务将位于表示层,因为IHttpContextAccessor仅在表示层上注册。或者,当您不是来自HTTP请求时,您可以有一个不同的服务实现,并且该服务将在基础结构层中注册。

下面是我所说的这项服务的一个例子:

https://github.com/jasontaylordev/CleanArchitecture/blob/main/src/WebUI/Services/CurrentUserService.cs

如果您对基础结构层进行更改,会发生什么。在这种情况下,它可能会破坏整个应用程序,因为入口点被破坏了,不是吗?

如果基础设施显然无法编译,那么项目就不能正常工作。基础设施只保存实现,如果其中一些实现被破坏,并不意味着整个应用程序就会死掉。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73911341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档