Estoy refactorizando una clase y agregando una nueva dependencia a ella. La clase está tomando sus dependencias existentes en el constructor. Entonces, por coherencia, agrego el parámetro al constructor.
Por supuesto, hay algunas subclases e incluso más para las pruebas unitarias, así que ahora estoy jugando el juego de alterar todos los constructores para que coincida, y está tardando años.
Me hace pensar que usar propiedades con setters es una mejor forma de obtener dependencias. No creo que las dependencias inyectadas sean parte de la interfaz para construir una instancia de una clase. Agrega una dependencia y ahora todos sus usuarios (subclases y cualquier instancia de usted directamente) de repente lo saben. Eso se siente como una ruptura de la encapsulación.¿Inyección de dependencia mediante constructores o definidores de propiedad?
Esto no parece ser el patrón con el código existente aquí, entonces estoy buscando averiguar cuál es el consenso general, pros y contras de constructores versus propiedades. ¿Está usando mejor los setters de propiedades?
Creo que en muchos casos es preferible usar el patrón Objeto nulo y mantener las referencias en el constructor. Esto evita todas las comprobaciones nulas y la mayor complejidad ciclomática. –
@Mark: Buen punto. Sin embargo, la pregunta era sobre agregar una dependencia a una clase existente. Entonces mantener un constructor sin argumentos permite la compatibilidad con versiones anteriores. – sleske
¿Qué ocurre cuando se necesita la dependencia para funcionar, pero una inyección predeterminada de esa dependencia suele ser suficiente. Entonces, ¿esa dependencia debería ser "reemplazable" por la propiedad o por una sobrecarga del constructor? –