Hace un mes aproximadamente en base a una necesidad puntual (origen de muchas cosas), se me ocurrio crear conceptualmente una nueva forma de hacer Web.
Hoy en dia, el modelo tradicional de desarrollo de sitios desde el punto de vista de JavaScript es que cada "funcion" ejecuta sus request al servidor, y estas funciones procesan el resultado en base a sus necesidades.
Este esquema plantea 2 problemas de inmediato, por un lado la cantidad de request que se hacen al servidor, y por el otro la cantidad de codigo javascript para tomar desiciones en base al resultados.
Vamos a cambiar un poco de tema, pero sin irnos del punto principal.
Por otro lado, tenemos el tema de eventos en JavaScript, los cuales si bien conocemos los clasicos (onclick, mousemove, etc), tambien nos hemos acostumbrado a librerias como prototype o mootools que nos hacen la vida simple, y disparan y agregar oyentes de eventos de todo tipo.
Entonces, vallamos uniendo cabos.
Si podemos agregar eventos de todo tipo (no solo los "reales" por asi decirlos), y agregar oyentes, no seria interezante que los resultados de los request disparan N eventos???.
Para completar la idea, tenemos que plantear el siguiente esquema.
Imaginemos una clase en javascript (estatica) , la que cuenta un metodo para agregar un evento a un array (formado por Id de evento y funcion a ejecutar), y metodo para disparar eventos.
Ahora bien, en una funcion de nuestro codigo hace un resquest para solicitar por ejemplo la descarga de un archivo. En ese mismo sitio, el usuario tiene amigos, y puede ver quien esta online y quien no, mas un contador de archivos bajados.
Ahora bien, vamos a ver el ejemplo-
//Esta funcion se llama cuando queremos bajar un archivo.
function downloadFile(){
//la clase ajax es estatica, ejecutamos send.
RequestAjax.send(url, params);
}
//La clase ajax tiene un metodo estatico que agrega comandos, estos "viajaran" juntos con el
//comando que se envia en el metodo send();
RequestAjax.addCommand('getUsersConnected', {user_id:Site.UserLogged});
RequestAjax.addCommand('getTotalDownloadFiles', {user_id:Site.UserLogged});
//Agregamos funcionalidad cada vez que se ejecute el evento Id 100
Events.addListener(100, function(obj){
Site.refreshTotalDownload(obj.total);
});
//Agregamos funcionalidad cada vez que se ejecute el evento Id 100
Events.addListener(100, function(obj){
if(obj.total>100) alert("has superado los 100 archivos, felicitaciones);
});
//Agregamos funcionalidad cada vez que se ejecute el evento Id 101
Events.addListener(101, function(obj){
for(...obj...){
Site.setOnline(obj.user);
}
});
Imaginamos como seria la respuesta desde el lado del servidor...
Response['original']={};
Response['Events'][0]={eventId: 100, data:{}};
Esto es mas o menos para que vallan imaginandose por donde biene la mano de esta tecnica de desarrollo.
Es bastante interezante, en proximos articulos se veran casos practicos mas entendibles.
Saludos.
Unite al grupo
|
|
| Suscribirte a webandbeer |
| Consultar este grupo |
miércoles, 30 de abril de 2008
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario