javascript - patrones - revealing module pattern
Usando el patrón del módulo para proyectos más grandes (3)
Estoy interesado en usar el Patrón de Módulo para organizar mejor mis futuros proyectos. Desafortunadamente, solo hay unos pocos tutoriales breves y ejemplos de prueba de concepto del patrón del módulo.
Usando el patrón del módulo, me gustaría organizar proyectos en este tipo de estructura:
project.arm.object.method();
Donde "proyecto" es el nombre de mi proyecto global, "brazo" es una subsección o rama del proyecto, "objeto" es un objeto individual, y así sucesivamente a los métodos y propiedades.
Sin embargo, no estoy seguro de cómo debería declarar y organizar múltiples "armas" y "objetos" en "proyecto".
var project = window.project || {};
project.arm = project.arm || {};
project.arm.object = (function() {
var privateVar = "Private contents.";
function privateMethod() {
alert(privateVar);
}
return {
method: privateMethod
};
}());
¿Existen prácticas recomendadas o convenciones al definir una estructura de módulo compleja? ¿Debo declarar un nuevo brazo / objeto debajo del último?
Aquí hay una buena reseña de lo que estás buscando; http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth
Hay muchos matices en cómo las personas prefieren hacer eso, pero el principal beneficio de lo que usted llama el patrón del módulo (un ámbito con nombre), es que no está saturando el espacio de nombres global, lo que ayuda a mantener las cosas limpias si trae otras bibliotecas, etc., y evita colisiones de nombres.
La forma en que organice los nombres y los ámbitos anidados dentro de eso es en gran medida una cuestión de preferencia personal.
dojo.declare
de Dojo es ideal para este tipo de cosas ya que
Cree un constructor utilizando una notación compacta para la herencia y la extensión del prototipo.
También es muy conveniente si solo para eliminar este tipo de placa de caldera:
var project = window.project || {};
project.arm = project.arm || {};
Si solo quieres esa característica, entonces podrías usar dojo.setObject
, pero por supuesto, escribir algo para hacer lo mismo es trivial.
dojo.setObject("project.arm.object" (function() {
var privateVar = "Private contents.";
function privateMethod() {
alert(privateVar);
}
return {
method: privateMethod
};
}()));
Recientemente utilicé dojo.declare
/ dojo.setObject
para un proyecto de JavaScript grande (86 archivos, 7K líneas (sin contar los comentarios y líneas en blanco)), y fue muy fácil mantener todo organizado y manejable, especialmente cuando tiene un mecanismo de inclusión. como dojo.require
y dojo.provide
.