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…

Primeros pasos con Camunda BPM...

... e impresiones. En el competido mercado de las Soluciones de Business Process Management(BPMS) se encuentran diversos fabricantes con productos u opciones de diversa calidad. Por mi foco de carrera o área de trabajo me ha tocado prácticamente trabajar con la gran e inmensa mayoría de todas estas soluciones de software, desde las más sencillas y económicas, las más populares y conocidas, las comerciales, las de código abierto, y hasta las más costosas, “worldclass”, de estas soluciones de BPM.