Constructor de puertas javascript
El patrón de diseño que vamos a repasar hoy se conoce comúnmente como el patrón de diseño constructor, que es un patrón utilizado para ayudar a construir objetos complejos. Ayuda a separar la construcción del objeto de su representación, lo que nos ayudará a reutilizarlo para crear diferentes representaciones.
Como se mencionó anteriormente, el patrón constructor es generalmente más necesario cuando necesitamos una forma de ayudar a simplificar las construcciones de objetos complejos, por lo que el mejor momento para introducir esto en tu código es cuando estás llegando a ese punto o cuando se están volviendo grandes.
Si decidieras hacer un viaje de seis meses de vacaciones a las islas caribeñas, ¿qué tan bien crees que recordarías a qué se refieren esos dos parámetros del medio? Te verías obligado a volver a revisar el código fuente para poder entender con claridad lo que realmente significan.
Esto es especialmente un problema cuando ambos parámetros son del mismo tipo. Cualquier desarrollador podría confundir fácilmente la posición de los parámetros de peso o altura al instanciar una rana, y en un escenario del mundo real estas situaciones son especialmente importantes en industrias como la de la salud, porque un desajuste de datos puede costar potencialmente mucho dinero a las empresas.
¿Qué son los constructores en la programación?
El patrón constructor es un patrón de diseño diseñado para proporcionar una solución flexible a varios problemas de creación de objetos en la programación orientada a objetos. La intención del patrón de diseño Builder es separar la construcción de un objeto complejo de su representación. Es uno de los patrones de diseño Gang of Four.
¿Para qué sirve el constructor?
Builder es un patrón de diseño de creación que permite construir objetos complejos paso a paso. El patrón permite producir diferentes tipos y representaciones de un objeto utilizando el mismo código de construcción.
Herramienta de construcción de Javascript
Esto se llama el patrón constructor telescópico. El problema con este patrón es que una vez que los constructores tienen 4 o 5 parámetros se hace difícil recordar el orden requerido de los parámetros, así como qué constructor en particular podría querer en una situación dada.
En la mayoría de los casos, no se utilizarán todos los parámetros, haciendo que las llamadas al constructor sean bastante feas con null o ”. Vuelve al código después de 3 semanas de vacaciones, y no tendrás ni idea de lo que hace el parámetro null a menos que mires el constructor específico.
El patrón constructor es un patrón de diseño diseñado para proporcionar una solución flexible a varios problemas de creación de objetos en la programación orientada a objetos. La intención del patrón de diseño Builder es separar la construcción de un objeto complejo de su representación. Es uno de los patrones de diseño del Gang of Four. — Effective Java, 2nd Edition by Joshua BlochPatrón Constructor – Wikipedia
Ahora vamos a reescribir la clase Task utilizando el patrón Builder. Primero vamos a crear una clase Task, que es el objeto que pretendemos utilizar. Encapsulará todos los parámetros y la lógica de negocio para hacer lo que tiene que hacer.
Patrón de construcción de tipo de letra
Necesitamos dar a los usuarios la capacidad de personalizar sus perfiles de una manera viable que permita a nuestra aplicación escalar al mismo tiempo, al ver este problema hay dos enfoques populares que podríamos utilizar para resolverlo excluyendo el patrón constructor, veámoslos rápidamente:
Crear una clase Profile que contenga las propiedades del objeto por defecto y luego hacer que algunas subclases hereden de ella. Esto no está mal, pero tómate un minuto y piénsalo, esto significa que para cubrir todos los casos, el número de subclases debería ser igual a todas las variaciones posibles, lo que terminaría en un elevado número de subclases creadas, nada bueno.
Como se especifica en el título, otro enfoque podría consistir en tener la misma clase de Perfil y pasar las propiedades necesarias como argumentos en el constructor, esto eliminaría la dependencia de las subclases:
Esto funciona totalmente, y si es una clase que estamos seguros de que no va a crecer, entonces podemos seguir adelante y utilizar este enfoque, no hay necesidad de complicar demasiado las cosas si los requisitos son cortos y simples. Si, por el contrario, la clase de perfil necesita flexibilidad y tiene potencial para crecer, entonces escalarla de esta manera puede resultar bastante problemática. Imagina que de repente la empresa quiere añadir múltiples características nuevas para personalizar el perfil como backgroundColor, menuColor y profileFont, con solo añadir estas 3 propiedades empezaremos a tener problemas para configurar e identificar los argumentos del constructor al instanciarlo, este problema también se conoce como el problema del constructor telescópico, y se reconoce que es un anti-patrón, si no sabes a qué me refiero, entonces mira el ejemplo de abajo:
Constructor visual de javascript
En pocas palabras, una función pura es aquella que siempre devolverá la misma salida, dada la misma entrada. Además, estas funciones no tienen efectos secundarios, lo que significa que son completamente independientes del estado exterior. Esta naturaleza hace que sea más fácil moverlas y refactorizarlas con seguridad, porque serán completamente deterministas y predecibles.
¿Qué ocurre aquí? En esencia, mi lineFunction está dependiendo del estado externo, lo que la hace impura. Si ejecutara el siguiente código, mi función no devolvería valores predecibles cada vez que la ejecute:
La inmutabilidad es el concepto que establece que tus datos u objetos no deben ser modificados una vez definidos. Esto significa que no es aconsejable cambiar el valor de una variable después de haberla declarado. Esto parece un poco loco a primera vista. Después de todo, es muy difícil replantear la mayor parte de nuestro código actual sin depender de los cambios de las variables.
Como puedes ver, estamos cambiando el valor del acumulador en cada iteración del bucle for. Al leer esto, forzamos a nuestro cerebro a estar pendiente de cuál es el valor de i. En esta función es bastante fácil, pero ¿qué pasaría si tienes este otro trozo de código?