NestJS是否真的需要服务提供商?

时间:2019-11-20 19:13:36

标签: nestjs

我试图了解将服务提供者注入NestJS控制器的目的是什么?这里的文档在这里说明了如何使用它们,而这不是这里的问题:https://docs.nestjs.com/providers

我想了解的是,在大多数传统的Web应用程序中,无论使用哪种平台,NestJS服务中都会使用很多逻辑,否则通常会直接进入控制器。 NestJS为什么决定将提供程序移至其自己的类/抽象中?对于开发人员而言,这里获得了哪些设计优势?

1 个答案:

答案 0 :(得分:3)

Nest从Angular汲取灵感,而Angular又从。NETJava Spring Boot等企业应用程序框架中汲取了灵感。在这些框架中,最大的问题是称为Separation of Concern (SoC)Single Responsibility Principle (SRP)的思想,这意味着每个类都处理一个特定的函数,并且在大多数情况下它可以在不真正了解其他部分的情况下做到这一点应用程序(导致松散耦合的设计模式)。

如果需要,您可以将所有业务逻辑放入控制器中,并称之为一天。毕竟,那将是一件容易的事,对吧?但是测试呢?您需要为要测试的每个功能发送完整的请求对象。然后,您可以创建一个请求工厂,以便为您提出这些请求,这样可以更轻松地进行测试,但是现在您还需要对工厂进行测试,以确保工厂能够正确生产(因此现在您正在测试测试代码) 。如果将控制器和服务分开,则可以测试控制器是否返回服务返回的所有内容。然后,他的服务可以具有特定的输入(例如,来自NestJS中的@Body()装饰器),并且具有更容易的输入以用于测试。

通过拆分代码,如果您在团队中并建立了接口,那么开发人员将在维护,测试和某些自治方面获得灵活性,从而使您知道从注入的服务中将获得哪种架构,而无需首先了解服务的工作原理。但是,如果您仍然不确定,也可以阅读Module ProgrammingCouplingInversion of Control

相关问题