2010-08-05 8 views

Respuesta

9

El propósito 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 determinada. 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).

Hay tal vez algunas de las razones legítimas que tal vez quiera inyectar una excepción, como con el diseño de un componente de manejo de excepciones, que relanzamientos excepciones después de la tala, embalaje, etc., o quizás donde la construcción de la excepción en sí mismo requiere recursos externos para alcanzar (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.

+0

Como alguien que siempre se pregunta sobre las minucias (no importa cuán insignificante), ¡esta es una gran respuesta! –

+0

Además, en las excepciones de PHP apuntan a la línea donde se crearon, no a la línea que las arroja. Así que al inyectarlos harían que señalen la línea en el contenedor DI que creó la excepción, que probablemente no es lo que querías :) Fuente: http://php.net/manual/en/class.exception.php – acidtv

4

Eso suena como un exceso de exceso.

Cuando se lanza una excepción, debería 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ó).

+2

¿Está permitiendo que las clases se acoplen a las excepciones que arrojan un compromiso aceptable cuando se prueban las unidades? – DRock

Cuestiones relacionadas