guidopj / rentauto

Base para todos los TP de la materia
0 stars 13 forks source link

Casteo innecesario #9

Closed aitrusgit closed 8 years ago

aitrusgit commented 9 years ago

En varios lados tienen esto:

image

Ese as Usuario es un casteo. Básicamente le están diciendo al compilador que no importa de que tipo sea el objeto que dice retornar getUsuarioPorCodigoDeValidacion ustedes van a asumir que siempre es Usuario

En este caso no significa ningún daño, pero es potencialmente peligroso. ¿Por qué? Imaginense esté escenario:

t1 - ustedes programan eso, su getUsuarioPorCodigoDeValidacion retorna un Usuario.. lo castean a Usuario de onda nomás t2 - años después vengo yo, ustedes están en otra cosa, y tengo que refactorizar el código de la Home. Se me ocurre que en lugar de devolver Usuario va a devolver una super-interfaz del mismo: IUsuario. Hago el cambio y espero que cosas no compilen (porque claro, ahora la home devuelve otro tipo). Arreglo los problemas pero Sistema nunca me muestra un problema (porque ustedes castean lo que le devuelvo, así que para ustedes nada cambió). En runtime sigue andando todo jamón, yo no cambié las instancias concretas que construyo (siguen siendo Usuario). Ustedes en el servicio castean mi IUsuario a Usuario y nada se rompe. t3- despues viene Ronny y se le ocurre cambiar las instancias concretas que la home devuelve. Total, todo el mundo debería estar solamente acoplado a IUsuario, el tipo que aparece como valor de retorno en la home. Cambia la instancia completa a UsuarioDecorator, todo sigue compilando de maravillas. En runtime, la cosa explota. Si tenía tests me voy a dar cuenta enseguida. Si no había tests me puedo dar cuenta en un mal momento.