SlideShare una empresa de Scribd logo
JavaScript no es Vietnam
Patrones y pruebas

                           Alex Casquete



                                           1
ESTE SOY YO
          Alex Casquete
         twitter: acasquete
       blog: www.idlebit.es
Hablemos de JavaScript…
JavaScript es…
JavaScript is in the air
JavaScript no es como cualquier
otro lenguaje orientado a objetos
    No vale con tirar líneas de código sin más
Tiene importantes diferencias con otros lenguajes
var myBeer = {
    “name” : “Moritz”,
    “take” : function() { alert(“Great!”); },
    “displayName” : function() {
        alert(this.name + “ is my Beer”);
    },
    “drink” : function() {
        // not implemented
    }
};

myBeer.displayName();
myBeer.drink();
PATRONES DE CREACIÓN DE OBJETOS
NAMESPACE - DECLARING DEPENDENCIES - PRIVATE PROPERTIES AND
METHODS – REVELATION PATTERN - MODULE PATTERN - SANDBOX -
STATIC MEMBERS - OBJECT CONSTANTS - CHAINING PATTERN

PATRONES DE REUTILIZACIÓN DE CÓDIGO
PROTOTYPAL INHERITANCE - INHERITANCE BY COPYING PROPERTIES –
MIX-INS - BORROWING METHODS

PATRONES DE DISEÑO
BUILDER – FACTORY – SINGLETON – DECORATOR – FAÇADE – PROXY –
CHAIN OF RESPOSIBILITY – COMMAND - ITERATOR – MEDIATOR –
OBSERVER - STRATEGY
Patrón Module
      var basketModule = (function() {
          var basket = []; //private
          return { //exposed to public
              addItem: function(values) {
                  basket.push(values);
              },
              getItemCount: function() {
                  return basket.length;
              },
              getTotal: function(){
                 var q = this.getItemCount(),p=0;
                  while(q--){
                      p+= basket[q].price;
                  }
                  return p;
              }
          }
      }());




                                                    9
Patrón Mediator


     Módulo 1


                  doSomething
     Módulo 2                   Mediator
                     done!



     Módulo 3




                                           10
Patrón Mediator
      var mediator = (function(){
          var subscribe = function(channel, fn){
              if (!mediator.channels[channel]) mediator.channels[channel] = [];
              mediator.channels[channel].push({ context: this, callback: fn });
              return this;
          },

         publish = function(channel){
             if (!mediator.channels[channel]) return false;
             var args = Array.prototype.slice.call(arguments, 1);
             for (var i = 0, l = mediator.channels[channel].length; i < l; i++) {
                 var subscription = mediator.channels[channel][i];
                 subscription.callback.apply(subscription.context, args);
             }
             return this;
         };

          return {
              channels: {},
              publish: publish,
              subscribe: subscribe,
              installTo: function(obj){
                  obj.subscribe = subscribe;
                  obj.publish = publish;
              }
          };
       }());
                                                                                    11
Patrón Façade
 var module = (function() {                             module.facade({run: true, val:10});
     var _private = {
         i:5,                                           //devuelve ‘current value: 10, running’
         get : function() {
              console.log('current value:' + this.i);
         },
         set : function( val ) {
              this.i = val;
         },
         run : function() {
              console.log('running');
         },
         jump: function(){
              console.log('jumping');
         }
     };
     return {
         facade : function( args ) {
              _private.set(args.val);
              _private.get();
              if ( args.run ) {
                  _private.run();
              }
         }
     }
 }());


                                                                                                  12
Patterns For Large-Scale JavaScript
         Application Architecture

Decouple app. architecture w/module,facade &
mediator patterns. Mods publish msgs, mediator
acts as pub/sub mgr & facade handles security


    http://addyosmani.com/largescalejavascript/
Pruebas
Las pruebas unitarias no son para JavaScript
SI NO PRUEBAS
TU CÓDIGO VAS A
   CONOCER EL
     DOLOR
JavaScript es díficil de probar
Si no tenemos nuestro código preparado
Código mezclado con HTML
Eventos en línea en el HTML
Frameworks Testing JavaScript
Un poco de código
Utiliza patrones
No reinventes la rueda
  Prueba tu código

                         20
JavaScript no es Vietnam
JavaScript no es Vietnam
MicroCharlas CatDotNet 26 de julio 2012

Más contenido relacionado

La actualidad más candente (18)

PDF
Creacion de proyecto_en_netbeans
Leonel Martinez Carrion
 
PPTX
7 Ventajas de Funciones en PHP
Javier Peñaranda
 
DOC
Ejemplos Para Dev C++
cemayoral
 
PDF
Desarrollo De Programas Ejemplos 01
Leonel Martinez Carrion
 
PPTX
Ejemplo de solución de práctica funciones stl
UVM
 
PPT
Lenguaje Borland C - Estructuras de Control
Karina Arguedas Ruelas
 
PPTX
Funciones definidas por el usuario
UVM
 
PPTX
Funciones C++ modificado
compumet sac
 
PPT
Funcionesclase1
computaciondosunefm
 
PPT
Estructuras de control en la POO
Amado Arcaya
 
PPTX
Funciones de Cadenas/ Computación para ingenieros
Maria jose Ramirez perez
 
PDF
Semana 2 Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)
Richard Eliseo Mendoza Gafaro
 
PPTX
Funciones en c++
Jose Eamirez
 
DOCX
Funciones
Carlos QF
 
PDF
Script de Punteros a Funciones
AnesGy SD
 
PPTX
Curso basico c sharp
Roberto Moreno Doñoro
 
PPTX
Estructura basica para_c_
HUGOJAREDSANCHEZMARTINEZ
 
Creacion de proyecto_en_netbeans
Leonel Martinez Carrion
 
7 Ventajas de Funciones en PHP
Javier Peñaranda
 
Ejemplos Para Dev C++
cemayoral
 
Desarrollo De Programas Ejemplos 01
Leonel Martinez Carrion
 
Ejemplo de solución de práctica funciones stl
UVM
 
Lenguaje Borland C - Estructuras de Control
Karina Arguedas Ruelas
 
Funciones definidas por el usuario
UVM
 
Funciones C++ modificado
compumet sac
 
Funcionesclase1
computaciondosunefm
 
Estructuras de control en la POO
Amado Arcaya
 
Funciones de Cadenas/ Computación para ingenieros
Maria jose Ramirez perez
 
Semana 2 Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)
Richard Eliseo Mendoza Gafaro
 
Funciones en c++
Jose Eamirez
 
Funciones
Carlos QF
 
Script de Punteros a Funciones
AnesGy SD
 
Curso basico c sharp
Roberto Moreno Doñoro
 
Estructura basica para_c_
HUGOJAREDSANCHEZMARTINEZ
 

Similar a JavaScript no es Vietnam (20)

PPTX
Javascript no es vietnam
Fernando Escolar Martínez-Berganza
 
PDF
Curso Javascript profesionales
Redradix
 
PPTX
JavaScript1IAxdxdxdxdxdxdxdxddddddd.pptx
fernando2410110
 
PPTX
JavaScript1ckjdfiudafhadvjsadgdhsagcjhASBjhcSJHcSAc
fernando2410110
 
PDF
Desarrollo web en Nodejs con Pillars por Chelo Quilón
betabeers
 
ODP
El Mal Odiado Javascript
El Jota
 
PDF
Programación Funcional en JavaScript
Javier Vélez Reyes
 
PDF
Arquitecturas Para La Reutilización en JavaScript
Javier Vélez Reyes
 
PPTX
Caracteristicas mas importantes de JavaScript
oscar2410290
 
PDF
05. Creando e implementando objetos y métodos
Danae Aguilar Guzmán
 
PPTX
hectorguzmanvilchisjajajajajajajaja.pptx
hector2410331
 
PPTX
19 javascript servidor
Jose Emilio Labra Gayo
 
PDF
Javascript OOP
Gabriel Chertok
 
PPT
Astema3
Omar Lichtjahre
 
PDF
Programacion Funcional en el Mundo Real - Introduccion a F#
Roberto Aranda Lopez
 
PDF
Programación Reactiva, Javascript Isomorfo y Meteorjs !
ouuyeah
 
PPTX
Grupo # 3 Exposición sobre JavaScript.pptx
OscarAlexanderLopezG
 
PPTX
JS Patterns Applied to a Real World Example
SUGES (SharePoint Users Group España)
 
PPTX
Introduccion a AJAX
Héctor Estigarribia
 
PPTX
Objetos en java script
Rebeca de la Cruz
 
Javascript no es vietnam
Fernando Escolar Martínez-Berganza
 
Curso Javascript profesionales
Redradix
 
JavaScript1IAxdxdxdxdxdxdxdxddddddd.pptx
fernando2410110
 
JavaScript1ckjdfiudafhadvjsadgdhsagcjhASBjhcSJHcSAc
fernando2410110
 
Desarrollo web en Nodejs con Pillars por Chelo Quilón
betabeers
 
El Mal Odiado Javascript
El Jota
 
Programación Funcional en JavaScript
Javier Vélez Reyes
 
Arquitecturas Para La Reutilización en JavaScript
Javier Vélez Reyes
 
Caracteristicas mas importantes de JavaScript
oscar2410290
 
05. Creando e implementando objetos y métodos
Danae Aguilar Guzmán
 
hectorguzmanvilchisjajajajajajajaja.pptx
hector2410331
 
19 javascript servidor
Jose Emilio Labra Gayo
 
Javascript OOP
Gabriel Chertok
 
Programacion Funcional en el Mundo Real - Introduccion a F#
Roberto Aranda Lopez
 
Programación Reactiva, Javascript Isomorfo y Meteorjs !
ouuyeah
 
Grupo # 3 Exposición sobre JavaScript.pptx
OscarAlexanderLopezG
 
JS Patterns Applied to a Real World Example
SUGES (SharePoint Users Group España)
 
Introduccion a AJAX
Héctor Estigarribia
 
Objetos en java script
Rebeca de la Cruz
 
Publicidad

Más de Alex Casquete (6)

PDF
Redis no es solo una caché
Alex Casquete
 
PPTX
Functional Programming with F#: Getting Started & Basic Concepts
Alex Casquete
 
PPTX
Working with disconnected data in Windows Store apps
Alex Casquete
 
PDF
45 F#antastic minutes!
Alex Casquete
 
PDF
Aplicaciones robustas con Programación Orientada a Aspectos
Alex Casquete
 
PDF
Entity Framework 4 desde cero
Alex Casquete
 
Redis no es solo una caché
Alex Casquete
 
Functional Programming with F#: Getting Started & Basic Concepts
Alex Casquete
 
Working with disconnected data in Windows Store apps
Alex Casquete
 
45 F#antastic minutes!
Alex Casquete
 
Aplicaciones robustas con Programación Orientada a Aspectos
Alex Casquete
 
Entity Framework 4 desde cero
Alex Casquete
 
Publicidad

Último (16)

PDF
Curso.Formacion.dron.A1.A3.Completo.v1.pdf
jimenoasenjo1
 
PPTX
HARDWARE ponderaciones y placas madre.pptx
jjcondori21
 
PPTX
ESPECIALIDAD DE REDES SOCIALES guías mayores.pptx
DianaLauraMadridEsco1
 
PPTX
Presentación_Estación_Total_Temas_Definidos.pptx fin.pptx
ximenamondrianbecerr
 
PDF
Exposición Rayleigh, teoría de la comunicación, etsii tugr
DanielPereiraRiquelm
 
PPTX
Revolucionando-los-Informes-Tecnicos-con-IA.pptx
DanielChura9
 
PDF
albañileriaalbañileriaalbañileriaalbañileriaalbañileria
danteisrael987654321
 
PPT
(cloud computing) se refiere al acceso a recursos informáticos a través de in...
75485218
 
PPTX
Poblacion_y_Muestra para trabajos de investigación pptx
yaneligomezcaceres
 
PPTX
MAQUINA DE TURING Y VARIANTES DEL LA MAQUINA DE TURING.pptx
GabyBraga4
 
PPTX
UiPath and Dream to Succeed Kick Off 2025 AI Agentic Automation RPA Program 2025
DianaGray10
 
PPTX
Manejo de Web de demostración modulo IOT.pptx
IsaacFernandoPrezSal1
 
PPTX
Presentación de servicios XMS (2025) - Partner Microsoft
INBOUND PLUS SpA
 
PDF
Distribución de frecuencias y Diagrama de Pareto en Excel - Trabajo Colaborat...
mapaulahiguita
 
PPTX
presentación a introducción de mantenimiento.pptx
ubaldoGonzalez16
 
PDF
Seguridad y auditorías en Modelos grandes del lenguaje (LLM)
Jose Manuel Ortega Candel
 
Curso.Formacion.dron.A1.A3.Completo.v1.pdf
jimenoasenjo1
 
HARDWARE ponderaciones y placas madre.pptx
jjcondori21
 
ESPECIALIDAD DE REDES SOCIALES guías mayores.pptx
DianaLauraMadridEsco1
 
Presentación_Estación_Total_Temas_Definidos.pptx fin.pptx
ximenamondrianbecerr
 
Exposición Rayleigh, teoría de la comunicación, etsii tugr
DanielPereiraRiquelm
 
Revolucionando-los-Informes-Tecnicos-con-IA.pptx
DanielChura9
 
albañileriaalbañileriaalbañileriaalbañileriaalbañileria
danteisrael987654321
 
(cloud computing) se refiere al acceso a recursos informáticos a través de in...
75485218
 
Poblacion_y_Muestra para trabajos de investigación pptx
yaneligomezcaceres
 
MAQUINA DE TURING Y VARIANTES DEL LA MAQUINA DE TURING.pptx
GabyBraga4
 
UiPath and Dream to Succeed Kick Off 2025 AI Agentic Automation RPA Program 2025
DianaGray10
 
Manejo de Web de demostración modulo IOT.pptx
IsaacFernandoPrezSal1
 
Presentación de servicios XMS (2025) - Partner Microsoft
INBOUND PLUS SpA
 
Distribución de frecuencias y Diagrama de Pareto en Excel - Trabajo Colaborat...
mapaulahiguita
 
presentación a introducción de mantenimiento.pptx
ubaldoGonzalez16
 
Seguridad y auditorías en Modelos grandes del lenguaje (LLM)
Jose Manuel Ortega Candel
 

JavaScript no es Vietnam

  • 1. JavaScript no es Vietnam Patrones y pruebas Alex Casquete 1
  • 2. ESTE SOY YO Alex Casquete twitter: acasquete blog: www.idlebit.es
  • 6. JavaScript no es como cualquier otro lenguaje orientado a objetos No vale con tirar líneas de código sin más Tiene importantes diferencias con otros lenguajes
  • 7. var myBeer = { “name” : “Moritz”, “take” : function() { alert(“Great!”); }, “displayName” : function() { alert(this.name + “ is my Beer”); }, “drink” : function() { // not implemented } }; myBeer.displayName(); myBeer.drink();
  • 8. PATRONES DE CREACIÓN DE OBJETOS NAMESPACE - DECLARING DEPENDENCIES - PRIVATE PROPERTIES AND METHODS – REVELATION PATTERN - MODULE PATTERN - SANDBOX - STATIC MEMBERS - OBJECT CONSTANTS - CHAINING PATTERN PATRONES DE REUTILIZACIÓN DE CÓDIGO PROTOTYPAL INHERITANCE - INHERITANCE BY COPYING PROPERTIES – MIX-INS - BORROWING METHODS PATRONES DE DISEÑO BUILDER – FACTORY – SINGLETON – DECORATOR – FAÇADE – PROXY – CHAIN OF RESPOSIBILITY – COMMAND - ITERATOR – MEDIATOR – OBSERVER - STRATEGY
  • 9. Patrón Module var basketModule = (function() { var basket = []; //private return { //exposed to public addItem: function(values) { basket.push(values); }, getItemCount: function() { return basket.length; }, getTotal: function(){ var q = this.getItemCount(),p=0; while(q--){ p+= basket[q].price; } return p; } } }()); 9
  • 10. Patrón Mediator Módulo 1 doSomething Módulo 2 Mediator done! Módulo 3 10
  • 11. Patrón Mediator var mediator = (function(){ var subscribe = function(channel, fn){ if (!mediator.channels[channel]) mediator.channels[channel] = []; mediator.channels[channel].push({ context: this, callback: fn }); return this; }, publish = function(channel){ if (!mediator.channels[channel]) return false; var args = Array.prototype.slice.call(arguments, 1); for (var i = 0, l = mediator.channels[channel].length; i < l; i++) { var subscription = mediator.channels[channel][i]; subscription.callback.apply(subscription.context, args); } return this; }; return { channels: {}, publish: publish, subscribe: subscribe, installTo: function(obj){ obj.subscribe = subscribe; obj.publish = publish; } }; }()); 11
  • 12. Patrón Façade var module = (function() { module.facade({run: true, val:10}); var _private = { i:5, //devuelve ‘current value: 10, running’ get : function() { console.log('current value:' + this.i); }, set : function( val ) { this.i = val; }, run : function() { console.log('running'); }, jump: function(){ console.log('jumping'); } }; return { facade : function( args ) { _private.set(args.val); _private.get(); if ( args.run ) { _private.run(); } } } }()); 12
  • 13. Patterns For Large-Scale JavaScript Application Architecture Decouple app. architecture w/module,facade & mediator patterns. Mods publish msgs, mediator acts as pub/sub mgr & facade handles security http://addyosmani.com/largescalejavascript/
  • 15. Las pruebas unitarias no son para JavaScript
  • 16. SI NO PRUEBAS TU CÓDIGO VAS A CONOCER EL DOLOR
  • 17. JavaScript es díficil de probar Si no tenemos nuestro código preparado Código mezclado con HTML Eventos en línea en el HTML
  • 19. Un poco de código
  • 20. Utiliza patrones No reinventes la rueda Prueba tu código 20
  • 23. MicroCharlas CatDotNet 26 de julio 2012