oop - qué - Al implementar la inyección de dependencia, ¿deberían aplicarse excepciones?
para qué es útil la inyección de dependencias (2)
Mi equipo está complicando la implementación de la inyección de dependencia en un proyecto de PHP usando un contenedor DI hecho en casa. Nuestra primera iteración de DI tal vez fue llevada al extremo, e incluso las excepciones se están inyectando en clases que dependen de ellos.
¿Es esta una buena práctica o una exageración?
Eso suena como una buena exageración.
Cuando se lanza una excepción, debe proporcionar algún tipo de información útil a través de su mensaje y tipo.
Si está inyectando la clase Exception para usar, eso significa que el tipo de Exception ya no es útil para descubrir cuál es realmente el problema (porque ya conoce el tipo desde que lo inyectó).
El objetivo de Dependency Injection es invertir la responsabilidad de obtener dependencias que son los colaboradores utilizados por un objeto para facilitar la configuración o el comportamiento colaborativo.
En general, las excepciones son inherentes al contrato de una clase dada. Es decir, las excepciones son parte del contrato implícito o explícito de cómo se comporta un componente en el caso de una falla y, por lo tanto, no se prestan a ser conmutadas con derivadas. Los eventos tampoco suelen tener un comportamiento, por lo que tampoco es particularmente interesante abstraerlos para el aislamiento de la prueba. Además, como los eventos típicamente solo representan un estado o evento de falla, ser capaz de inyectar derivadas de la excepción tampoco es particularmente valioso ya que cualquier consumidor del componente necesitaría codificar contra el contrato de excepción base (es decir, cualquier propiedad adicional no lo haría). ser visto).
Quizás haya algunas razones legítimas por las que podría querer insertar una excepción, como el diseño de un componente de manejo de excepciones que vuelva a lanzar excepciones después del inicio de sesión, el ajuste, etc., o quizás cuando la construcción de la excepción requiera recursos externos para lograrlo (aunque esa necesidad en sí misma me daría una pausa), pero en general no diría que debería desacoplar cómo un componente informa sus estados de falla de los componentes mismos.