Open aitrusgit opened 9 years ago
No entiendo bien a que te referis con inyectarle la implementacion. Entiendo que ese codigo deberia estar en el paquete test para no ensuciar el codigo. Entonces nuestro sistema pasaria a depender de que el generador de codigo "real" implemente GeneradorCodigo como de MailService?
Desde ya gracias.
Por inyectarle la implementación me refiero a setearsela desde afuera.
Lo que decís es correcto, tu sistema solo estaría acoplado a la interfaz GeneradorCodigo y el día de mañana, cuando alguien implemente un algoritmo posta para generar códigos, solamente tiene que implementar esa interfaz y setearsela a tu servicio, sin cambiar código de este.
Hay toda una tendencia en objetos (que en algún momento tuvo mucha fuerza, ahora medio que es algo casi standard) que consiste delegar la construcción y configuración de los objetos en alguien mas (https://en.wikipedia.org/wiki/Dependency_injection). Igual este párrafo es a modo anecdotico.
Así como hoy por hoy su servicio depende solamente de la interfaz de MailService y para los tests proveemos una implementación mock ustedes podrían fácilmente abstraer la generación del código de validación en algún otro objecto del cual el servicio solo dependa.
Para los tests podrían inyectarle una implementación que solo haga esto:
Y en su servicio ustedes no tendrían mas código dumy :)