2010-04-27 11 views
18

Me interesa utilizar el patrón de módulos para organizar mejor mis proyectos futuros. Desafortunadamente, solo hay algunos breves tutoriales y ejemplos de prueba de concepto del Patrón de Módulo.Uso del patrón de módulos para proyectos más grandes

Utilizando el patrón de módulo, me gustaría organizar proyectos en este tipo de estructura:

project.arm.object.method(); 

Donde "proyecto" es mi nombre global del proyecto, "brazo" es una sub-sección o rama de la 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 mejores prácticas o convenciones al definir una estructura de módulo compleja? ¿Debo declarar un nuevo brazo/objeto debajo del último?

Respuesta

2

Hay muchos matices de cómo la gente prefiere hacer eso, pero la principal ventaja de lo que está llamando el patrón de módulo (un alcance con nombre) es que no satura el espacio de nombres global, lo que ayuda mantenga las cosas limpias si trae otras bibliotecas, etc., y evita colisiones de nombres.

Cómo organiza los nombres y ámbitos anidados dentro de eso es en gran parte una cuestión de preferencia personal.

3

Dojo dojo.declare es ideal para este tipo de cosas ya que

Crear un constructor utilizando una notación compacta para la herencia y la extensión del prototipo.

También es muy conveniente si aunque solo sea por la eliminación de este tipo de placa de la caldera:

var project = window.project || {}; 
project.arm = project.arm || {}; 

Si lo que desea es esa característica, entonces se podría utilizar dojo.setObject, pero por supuesto, escribir algo para hacer el lo mismo es trivial.

dojo.setObject("project.arm.object" (function() { 
    var privateVar = "Private contents."; 

    function privateMethod() { 
     alert(privateVar); 
    } 

    return { 
     method: privateMethod 
    }; 
}())); 

Recientemente he usado dojo.declare/dojo.setObject para un proyecto de gran JavaScript (86 archivos, 7K + líneas (sin contar los comentarios y líneas en blanco)), y era muy fácil de mantener todo organizado y manejable, sobre todo cuando se tiene un mecanismo de inclusión como dojo.require y dojo.provide.

Cuestiones relacionadas