¿Usted, como desarrollador de Javascript, considera que los patrones de diseño tradicionales son importantes o menos importantes de lo que han sido con otros lenguajes / entornos?
Los patrones de diseño clásico no se aplican a JavaScript.
Lo que sí aplica es escribir código modular y funcional.
Debe usar una mezcla de Constructores y funciones de primera clase.
Como desarrollador de JavaScript, personalmente presiono para tratar JavaScript como LISP en lugar de Java. Así que trate de emular mónadas y código de estilo funcional de alto nivel en lugar de tratar de emular el código OOP clásico.
Nombra los tres patrones de diseño principales que utilizas regularmente como desarrollador de Javascript y da un ejemplo de cómo te han ayudado en tu desarrollo de Javascript.
Una vez más, los patrones de diseño no se aplican tanto, pero a continuación hay tres construcciones importantes.
- Uso de cierres
- Uso de funciones de primera clase.
- Uso de fábricas de objetos con o sin
new
Deje algún tipo de contexto para el que pueda mostrar ejemplos de este tipo de técnicas en comparación con hacer el mismo tipo de código utilizando patrones de diseño tradicionales.
Echemos un vistazo a algunos de los patrones de diseño clásicos y cómo implementarlos en js, así como los patrones alternativos más adecuados para js:
Patrón de observador:
En node.js
esto es simple events.EventEmitter
. En jQuery
esto es $.fn.bind
&& $.fn.trigger
. En backbone
esto es Backbone.Events.trigger
y Backbone.Events.bind
. Este es un patrón muy común utilizado en el código del día a día.
Nunca me detengo y pienso "¡Hola, estoy usando un patrón de observación aquí!". No, esta es solo una forma de bajo nivel para pasar mensajes o una forma de cambio en cascada.
Por ejemplo, en la red troncal, todas las vistas MVC se unen al onchange
evento de los modelos , por lo que cambiar el modelo en cascada cualquier cambio automáticamente en la vista. Sí, este es un patrón poderoso, pero su uso es tan común en la programación dirigida por eventos que no se daban cuenta de que lo usaban en todas partes.
En el WebSocket
prototcol tenemos el .on
que usamos para unirnos a on("message", ...
eventos. Una vez más, esto es muy común, pero es un observador en una secuencia en lugar de su clásico OOP basado while (byte b = Stream.ReadNextByte())
.
Todos estos son usos poderosos del patrón Observador. Pero este no es un patrón que uses. Esta es una parte simple del lenguaje. Esto es solo código.
Patrón de recuerdo:
Esto es simplemente JSON. Le permite serializar el estado de un objeto para que pueda deshacer una acción.
function SomeObject() {
var internalState;
this.toJSON = function() {
return internalState;
}
this.set = function(data) {
internalState = data;
}
this.restore = function(json) {
internalState = JSON.parse(json);
}
}
var o = new SomeObject();
o.set("foo"); // foo
var memento = JSON.stringify(o);
o.set("bar"); // bar
o.restore(memento);
En JavaScript, admitimos de forma nativa una API para recuerdos. Simplemente defina un método llamado toJSON
en cualquier objeto. Cuando lo llame JSON.stringify
, llamará internamente .toJSON
a su objeto para obtener los datos reales que desea serializar a JSON.
Esto le permite hacer instantáneamente instantáneas de su código.
De nuevo, no me doy cuenta de que es un patrón de recuerdo. Esto es simplemente usar la herramienta de serialización que es JSON.
Patrón de estado / Patrón de estrategia:
No necesitas un patrón de estado. Tiene funciones de primera clase y tipos dinámicos. Simplemente inyecte funciones o cambie propiedades sobre la marcha.