因此,我开始阅读有关清洁架构的内容,到目前为止,我可以看到,像这样的架构设计的全部目的是将关注点和应用程序的各个部分分离开来,以便实现更大的未来更改,比如更容易地切换到另一个ORM。
从我读过的文章来看,解决方案的WebAPI项目似乎应该引用应用程序和基础结构层。我明白为什么我们需要引用应用层,但是基础设施呢?
这使得WebAPI层(本质上是应用程序的入口点)依赖于基础设施层,这导致了紧密耦合的情况(至少在我的头脑中)
你能帮我理解一下背后的原因吗?如果对基础结构层进行更改,会发生什么情况。在这种情况下,它可能会破坏整个应用程序,因为入口点被破坏了,不是吗?
发布于 2022-09-30 18:01:41
根据一般经验规则,所有模块(而不是服务)的注册都是在表示层中完成的。
例如:
// 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://stackoverflow.com/questions/73911341
复制相似问题