Ir al contenido principal

Novatos “Expertos”

Recientemente me encontraba trabajando con uno de estos programadores que creen que programar es “echar” líneas de código, y que piensan que conocer un lenguaje de programación los hace programadores como tal. Este individuo en cuestión, incluso parloteaba sobre Patrones de Diseño, más específicamente sobre el patrón de diseño Factory.

Cuestionaba este sujeto el uso del patrón Factory a lo largo de un  código. Él no estaba de acuerdo, y decía que uno usa el Factory es “cuando no sabe que clase va a instanciar”, que si sabemos cuál es la clase no debemos usar Factory porque es más lento que la instanciación directa del objeto y además introducimos mucha “indirección”, esa es la palabra que usó,  en el código.

Esto sólo demuestra un par de cosas.
La primera es que tenemos a alguien que cree que conoce algo.
La segunda es que lo conoce MAL.



En primer lugar el patrón Factory no se usa porque sepamos o no que clase debemos instanciar. Se usa porque garantiza que de ser necesario cambiar la clase que estamos instanciando por una nueva, otra implementación, podamos hacerlo sin tener que buscar por todo el código en dónde fue que usamos o instanciamos la clase. Su uso se justifica cuando las implementaciones pueden cambiar con cierta regularidad.


En otras palabras, si debemos modificar la clase a instanciar, existe un único punto o sitio en el que esa instanciación ocurre, y eso es en el Factory.

Sí combinamos esto con el uso adecuado de interfaces y principios SOLID, entonces nuestro código resultará más fácil de mantener, en el sentido de que no es necesario modificar lo que ya funciona con miras a introducir cambios o ampliaciones en el sistema.

Claro que es más rápido para el programador escribir algo como:


Class Document{ 
   Document(){                } 
   Document(String type){                } 
} 

// al usar la claseDocument

  doc= new Document(); 
  Document docXml= new Document(“XML”);

Usando la palabra clave new obtenemos una instancia de la clase Document. Directo. Rápido. Fácil.

No tanto…

Imaginemos que tenemos un sistema o programa realmente grande, con muchos programadores, muchos módulos, y hemos hecho uso intensivo de la clase Document; es lógico pensar que tenemos entonces muchas instancias de esa clase a lo largo del código, digamos que tenemos unas 300 instancias, en otras palabras, hemos usado new Document();, o su versión sobrecargada, unas 300 veces.

Ahora imaginemos que, por nuevos requerimientos, es necesario que sustituyamos todas las instancias creadas con el constructor sin parámetros por la nueva clase DocumentNotTyped, y las instancias creadas con el constructor con parámetros por la nueva clase DocumentTyped.

Esto implica que, de algún modo ya sea automático o manual, debemos buscar en todas los fuentes donde es que usamos la sentencia para instanciar la clase Document, y reemplazarla por la sentencia adecuada a la clase nueva correspondiente. Esto a su vez implica que hay que recompilar todos los archivos fuentes modificados, empaquetar la aplicación o sistema y distribuir la nueva versión o actualizarla donde corresponda.

Con el uso adecuado de patrones de diseño, los principios SOLID e interfaces podríamos hacer todo esto tan solo escribiendo las clases nuevas, hacer que implementen la interface adecuada y configurar el Factory para que nos devuelva la implementación (instancia) adecuada según corresponda a cada caso.
Muchos menos archivos que modificar. Mucho menos archivos fuentes que compilar. Y, lo más importante, no se modifican, tocan o cambian ninguna de las implementaciones existentes, por lo que no se introducen nuevos errores en cosas que ya funcionaban.

Como ven, el uso del patrón Factory no tiene que ver con que no sepamos cuál clase vamos a instanciar, sino que tiene que ver con desacoplar  la instanciación de las implementaciones y facilitar el mantenimiento.
Así que Novatos, por favor tengan claro los conceptos, digiéranlos bien, entiéndanlos y practíquenlos antes de querer hacer afirmaciones como “Expertos”.

En próximos artículos hablaremos sobre los patrones de diseño y los principios SOLID.

Comentarios

Entradas populares de este blog

El Melange todavía corre

Ese era el estribillo de un capítulo de unas de mis series favoritas de la infancia, Meteoro o Speed Racer. En ese capítulo un auto “fantasma” el X-3, aparecía de imprevisto y dejaba a todos asombrados con su rendimiento y prestaciones y volvía a desaparecer. Traigo ese episodio a colación puesto que recientemente sostuve una amena charla con un querido amigo, en la que el me manifestaba como los Mainframes habían muerto, o mejor dicho, el concepto de la computación distribuida basada en Mainframes había desaparecido. Para variar, yo no estuve de acuerdo, y le dije que por el contrario, el modelo de computación basado en Mainframes está mas vigente que nunca. Estos fueron mis argumentos:

Primeros pasos con Camunda BPM – Modelando un Proceso BPMN 2.0

Tenemos entre manos la tercera publicación de nuestra serie sobre la Plataforma de BPM de Camunda .  El día de hoy vamos, por fin, a empezar a modelar o construir nuestro primer proceso sencillo en notación BPMN 2.0. Para ello vamos a usar el modelador o editor que ya hemos instalado en nuestra primera publicación , y vamos a guardarlo en la sección de recursos del proyecto Maven Java que configuramos en la segunda publicación . Así que, como ya es costumbre, manos a las sobras…

Como configurar jBPM para usar nuestra propia Base de Datos en un sólo paso

Llevo un buen rato trabajando con jBPM en su serie 6.x, y mi opinión sobre este producto en la versión mecionada no ha mejorado para nada. Es una herramienta plena de funciones y caracteristicas avanzadas, pero tambien está llena de Bugs y es realmente inestable, sobre todo en el ambiente de modelamiento.  Así mismo, debo decir que tiene una muy aceptable API REST y que el motor de procesos y la consecuente ejecución de los procesos es estable y bastante rápida. En esta publicación daré inicio a una serie de artículos que hablan sobre ciertas configuraciones comunes e importantes que se hacen con jBPM. Hoy iniciamos con la configuración de jBPM para que use nuestra base de datos favorita. Esto tiene sentido porque el producto viene con la base de datos H2 por omisión, la cual es excelente para pruebas y evaluaciones rápidas de la herramienta, pero es completamente inaceptable en un ambiente de desarrollo, QA o producción cualquiera. Así que manos a l