Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

293
Visualizações
¿Son realmente un problema las advertencias de dependencia circular en Angular?

Desde hace un tiempo, Angular admite un indicador de compilación showCircularDependencies ( https://angular.io/guide/deprecations#angular-devkitbuild-angular ) que le alerta sobre las dependencias circulares dentro de las clases.

Pero, ¿son esas advertencias realmente un problema? Echemos un vistazo a un ejemplo.

 import {MyOtherService} from './my-other-service.ts'; @Injectable() class MyService { constructor(private otherService: MyOtherService) } function calculate(): void { // some method that should be exported so it can be used without the service instance } export {MyService, calculate}

y archivo 2

 import {calculate} from './my-service.ts' @Injectable() class MyOtherService { constructor() { calculate(); } }

Esto ahora generará una advertencia my-service.ts -> my-other-service.ts -> my-service.ts

Mi pregunta es, ¿es esto realmente un problema? Porque, por lo que veo, JS es lo suficientemente inteligente como para importar solo las partes necesarias y no está causando una pérdida de memoria aquí.

Y en una nota al margen: para los casos en los que causaría problemas, por ejemplo MyOtherService inyectando MyService en el constructor, obtendrá errores de compilación de Angular porque no puede compilar en absoluto. (Y también si observa el enlace de documentación anterior, notará que esta opción para mostrar incluso las advertencias quedará obsoleta en Angular 14)

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

TL;DR

Extraiga el código en su propio archivo e impórtelo por separado. Elimine las dependencias cíclicas a toda costa, ya que puede generar problemas importantes.

Explicación

Personalmente, creo que esto no es un problema con respecto a si funciona o no en primer lugar, sino más bien una cuestión de calidad del código -> acoplamiento de código.

Tomemos su ejemplo, pero cambie el nombre de MyService a BaseService y MyOtherService a InjectedService :

Si ignoramos la importación y llamamos a calculate por un momento, estamos en la situación en la que BaseService depende de InjectedService . Si ahora cambia algo en InjectedService , siempre debe asegurarse de que nada se rompa en BaseService . Pero si cambia algo en BaseService , no tiene que preocuparse por las implicaciones para ningún otro servicio.

Si ahora tomamos el ejemplo original, tiene una dependencia en ambas direcciones (por lo tanto, la dependencia cíclica). Tendrá que mantener siempre ambos servicios si cambia algo en cualquiera de ellos porque las cosas pueden romperse en ambas direcciones. En algún momento, usted o uno de sus compañeros de trabajo puede olvidarse de hacerlo, y ahí es cuando se introducen los errores. Ahora el problema puede empeorar aún más, si las dependencias cíclicas son indirectas, es decir, abarcan varios archivos ( >2 ; eg A -> B -> C -> A ). Entonces puede volverse realmente complicado, y la inteligencia de la carga del módulo de JavaScripts podría no ser suficiente.

La solución a este problema es bastante sencilla. Extraiga el código que desea calculate en su propio archivo (es una función de todos modos y no tiene conexión con la clase). Sí, da como resultado un archivo adicional con poco contenido, pero desde el punto de vista de la codificación limpia y la facilidad de mantenimiento, es una opción mucho mejor.

Si aún cree que es mejor la forma en que lo tiene, tiene la opción de desactivar la advertencia en su archivo angular.json .

 "defaults": { "apps": { "showCircularDependencies": false }, ... }
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda