Monkey Patching, Duck Typing e Inyección de Dependencias. https://podcast.jcea.es/podcastz/2
Notas:
- 00:50: Se utiliza un caso real para explicar estas técnicas con más facilidad.
- 01:50: La librería estándar para el envío de correo electrónico en Python, la
SMTPlib, se nos queda pequeña (para este proyecto en concreto). - 02:01: ¡Sí!, ¡por supuesto que usamos Python!.
- 02:12: Pero estas técnicas son aplicables también a otros lenguajes dinámicos.
- 02:48: Los motivos por los que la
SMTPlib se me quedaba pequeña: Quiero
"timeouts" dinámicos, quiero limitar el número de conexiones simultaneas por servidor de correo,
y quiero controlar la IP de origen de la conexión saliente. - 05:52: ¿Por qué no modificamos el código directamente o utilizamos los mecanismos
de herencia normales?. Por mantenimiento de código y porque lo que queremos modificar no es
fácilmente accesible por herencia porque está muy "profundo" en la clase original. - 09:04: Por fin entramos en materia. Empezamos con
Monkey Patching. Modificación
de código, clases y objetos en memoria. - 12:44: ¿Cuándo es preferible utilizar
Monkey Patching en vez
de mecanismos más habituales?. - 13:30: Otro ejemplo de
Monkey Patching: Los
"hot fixes"
tradicionales de ZOPE. - 16:29: Por supuesto, esta técnica es compleja y delicada, y tiene sus riesgos.
- 18:17: Pasamos a hablar de
Duck Typing. Polimorfismo sin
herencia. Frase del día: "Es un pato a efectos prácticos". O su corolario posterior:
"Si parece un pato, es un pato. Aunque no lo sea" :-). - 20:25: En lenguajes estáticos como Java, se utiliza el concepto de
"interfaces abstractos",
verificados en tiempo de compilación. Con Python no se realiza ninguna comprobación, y la compatibilidad
de tipos se decide en tiempo de ejecución, cuando se invocan métodos concretos con parámetros concretos. - 22:19: Los interfaces abstractos te permite definir dos objetos como compatibles, aunque no
hereden de las mismas clases. - 22:28: Un ejemplo de interfaces es la abstracción de ficheros en Python (o, por ejemplo, en
la filosofía UNIX de que todo es un fichero). - 22:54: El Duck Typing
también tiene sus problemas. - 25:09: Hay dos escuelas de pensamiento en casi todo, dicotomías por doquier.
- 26:00: Una forma de estar tranquilos es tener una buena
batería de test. - 26:45: Hablamos ahora de
inyección de dependencias.
Recapitulamos y, ahora, todo encaja. - 28:41: Desvinculamos la dependencia implícita interna que tiene una librería, y
la hacemos explícita y manipulable. - 29:00: La inyección de dependencias te facilita mucho la vida a la hora de probar el código.
- 30:40: Bueno, en realidad el programa de ejemplo que he usado para ilustrar la descripción
de estas técnicas no funciona como se ha descrito :-). Se emplea también Monkey Patching,
pero de forma diferente y más estable
ante actualizaciones python. Lo detallé en mi web en 2007. - 31:40: Fé de erratas.