Blog

Paquetes y namespace

Mar 16, 2009 | Español | By Crysfel | 6 Comments | Read in English

Es importante tener en cuenta que otros desarrolladores o usuarios pueden utilizar nuestro código, además de que necesitamos crear código que pueda ejecutarse con alguna otra librería sin tener ningún problema.

Paquetes y namespace
Author: Crysfel

I'm a software developer with 6+ years of experience, when I'm not developing software I may be writing a tutorial, you can follow me on twitter

En mi experiencia me ha tocado trabajar en proyectos donde las variables están declaradas en el “global scope” generando problemas realmente extraños y difíciles de rastrear, es en esos momentos cuando te das cuenta de la importancia de empaquetar nuestras aplicaciones.

JavaScript no tiene un palabra reservada que nos permita empaquetar nuestros objetos como en lenguajes Java o C#, pero tomando en cuenta que los objetos pueden alojar otros objetos podemos solucionar este problema de la siguiente manera.

//Se crea el objeto com
var com = {};
//se le agrega el objeto quizzpot
com.quizzpot = {};
//se crea el "paquete"
com.quizzpot.tutorial = {};
//Se agrega un constructor de objetos
com.quizzpot.tutorial.Person = function(options){
	this.name = options.name;
}
//se crea una instancia
var p = new com.quizzpot.tutorial.Person({name:'John'});
//se imprime en consola
console.debug(p);

De esta manera se crea un espacio robusto de nombres, con esto nos evitaremos que alguien más cree un objeto “Person” y sobrescriba el nuestro.

Si cada vez que creamos una función constructora creamos todo el paquete podemos sobrescribir paquetes existentes, para evitar esto debemos verificar si el paquete ya existe, de ser así utilizar el existente y agregar los que sean necesarios, eso lo hacemos de la siguiente manera:

//verificamos si existe la variable "com" para usarla,
//si no existe creamos un objeto vacío
var com = com || {};
//hacemos el mismo procedimiento
com.quizzpot = com.quizzpot || {};
com.quizzpot.tutorial = com.quizzpot.tutorial || {};

//creamos el constructor del objeto
com.quizzpot.tutorial.User = function(options){
	this.nickname = options.nickname;
}

//se crea una instancia
var p = new com.quizzpot.tutorial.Person({name:'John'});
var u = new com.quizzpot.tutorial.User({nickname:'stock'});
//se imprime en consola
console.debug(u);
console.debug(p);

Para evitar todo el proceso de comparar la existencia de los objetos a la hora de formar los paquetes, podemos utilizar una herramienta de Ext JS, de la siguiente manera:

Ext.namespace('com.quizzpot.tutorial');
//o bien el siguiente atajo
Ext.ns('com.quizzpot.tutorial');

De esta manera creamos el paquete deseado y si existe no lo sobrescribe, simplemente utiliza el anterior.

Conclusiones

Aunque en JavaScript no exista una palabra reservada para crear paquetes, como es el caso de otros lenguajes, si podemos implementar esta técnica ya que sí se puede alojar un objeto dentro de otro objeto. Es importante recordar que al definir el nombre de los “paquetes”, debemos verificar si existen para no sobreescribirlos.

Cualquier sugerencia, duda o comentario es bienvenido y por supuesto los votos en Digg o en tu red social favorita.

6 Responses to “Paquetes y namespace”

  • jairo Sep 23, 2009

    Es muy importante, para cuando se esta empezando, uno ve los ejemplos y se pregunta para que es la instrucción Ext.ns(‘com.quizzpot.tutorial’); .

    Saludos y gracias.

  • José Oct 31, 2009

    Hola Esta super chido esta web … siguiendo con el tema me perguntaba que codigo seguiria despues de hacer la declaracion del paquete

    Ext.namespace(‘com.quizzpot.tutorial’);

    tendria que ir el constructor me imagino !!

    • Crysfel Nov 02, 2009

      Después de declarar el namespace (“paquete”), tienes que escribir tus objetos usando tu paquete que creaste.

  • Rodrigo Jan 12, 2010

    Estimado, tengo una duda, resulta que estoy desarrollando una aplicacion y esta esta repartida en varios archivos, ahora lo que necesito es saber como dejar todos esos objetos que estan en distintos archivos integrados en el mismo namespace.

    de antemano muchas gracias y felicitaciones por el aporte que haces a la comunidad

  • Croston Apr 16, 2010

    Hola estimado Crysfel, yo queria saber si no falta el constructor en el anteúltimo ejemplo, para crear una instancia con el objeto com.quizzpot.tutorial.Person.

    Saludos y gracias.

    • Crysfel Apr 16, 2010

      El objeto Person se creo en la linea 8 del primer ejemplo ;)

      Saludos

Leave a Reply







Updates

RSS

Subscribe to our feeds to receive updates of our newest posts and free tutorials.

Site search

Maybe we have what you need, would you like to search first?

Donations

Would you buy me a cup of coffee? I am sharing my knowledge and time with you, help this project grow. Thank you!