Resumen
- Abordamos el concepto de Inversion de Control.
- Nos introdujimos a la Inyección de dependencias.
- Discutimos sobre: Refactor y Manejo del Cambio
- Vimos cómo hacer refactors en vivo ayudándonos con un IDE
Ejemplos de código
A continuación dejamos algunos ejemplos vistos en clase:
Inyección de dependencias
// la forma de obtener dependencias con control directo
class FuenteEstatica {
lectorDeCsvs
constructor() {
this.lectorDeCsvs = new LectorDeCsvs()
}
}
fuente = new FuenteEstatica()
fuente = new FuenteEstatica() // MALDICION! NO PUEDO CAMBIARLO
// alternativa a medio camino: service locator
class FuenteEstatica {
lectorDeCsvs
constructor() {
this.lectorDeCsvs = ServiceLocator.INSTANCE.getLectorDeCSVs()
}
}
ServiceLocator.INSTANCE.setLectorDeCSV(new LectorDeCsvs())
fuente = new FuenteEstatica()
ServiceLocator.INSTANCE.setLectorDeCSV(lectorDeCSVSoloParaElTest)
fuente = new FuenteEstatica()
// alternativa con inyección de dependencias
class FuenteEstatica {
lectorDeCsvs
constructor(lectorDeCsvs) {
this.lectorDeCsvs = lectorDeCsvs
}
}
//fuente = new FuenteEstatica(new LectorDeCsvs())
fuente = new FuenteEstatica(lectorDeCSVSoloParaElTest)
fuente = new FuenteEstatica(LectorDeCsvs.getInstance())
Singleton
class LectorDeCSV {
public static LectorDeCSV INSTANCE = new LectorDeCSV();
}
Code smells
Los code smells son simplemente heurísticas. No dicen taxativamente si algo es correcto o incorrecto.
// Message chain (cadena de envío de mensajes)
// ¿Esto está mal? ¡Habría que analizarlo!
objeto
.mensaje()
.otroMensaje()
.otroMensajeMas()
// Quizás podemos delegarlo:
objeto.unMensajeMasInteresante()
// O quizás es aceptable
// Por ejemplo, podría el API de streams de java
// nos fuerza a escribir el código de esa forma
objeto
.stream()
.fitler()
.map()
.toList()
Material
- Presentación
- Manejo del cambio: Expansión y refactoring
- Deuda técnica:
- Biblioteca vs. Framework
- Introducción a la inyección de dependencias
- Ejemplos Code Smells
- Enunciado de Monedero
- Complementario: QMP 3
Tarea
- Lectura: Diseño de Interfaces Entrantes y Salientes
- Complementario: Video sobre testing de interfaces externas
- Lectura: Patrón Adapter del Libro de Gamma (ver nota en el formulario de seguimiento)
- Lectura: Testing (incluye Impostores y testing en JUnit)
- Complementario: Mocks aren’t Stubs
- Lectura: Ingeniería de Software, Ian Sommerville, Ética en la ingeniería de software (sección 1.2, páginas 14 a 19)
- Enlace en Academia.edu (el cual refiere a su vez al Código de conducta de ACM)
- Complementario: Ethics: Why Software Engineers Can’t Afford to Look Away
- Ejercicio: Qué Me Pongo: Cuarta Iteración