SlideShare ist ein Scribd-Unternehmen logo
1 von 23
Downloaden Sie, um offline zu lesen
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
MicroCharlas CatDotNet 26 de julio 2012

Weitere ähnliche Inhalte

Was ist angesagt?

Ejemplos Para Dev C++
Ejemplos Para Dev C++Ejemplos Para Dev C++
Ejemplos Para Dev C++
cemayoral
 
Lenguaje Borland C - Estructuras de Control
Lenguaje Borland C - Estructuras de ControlLenguaje Borland C - Estructuras de Control
Lenguaje Borland C - Estructuras de Control
Karina Arguedas Ruelas
 

Was ist angesagt? (18)

C++ y sus librerias
C++ y sus libreriasC++ y sus librerias
C++ y sus librerias
 
Creacion de proyecto_en_netbeans
Creacion de proyecto_en_netbeansCreacion de proyecto_en_netbeans
Creacion de proyecto_en_netbeans
 
7 Ventajas de Funciones en PHP
7 Ventajas de Funciones en PHP7 Ventajas de Funciones en PHP
7 Ventajas de Funciones en PHP
 
Ejemplos Para Dev C++
Ejemplos Para Dev C++Ejemplos Para Dev C++
Ejemplos Para Dev C++
 
Desarrollo De Programas Ejemplos 01
Desarrollo De Programas Ejemplos 01Desarrollo De Programas Ejemplos 01
Desarrollo De Programas Ejemplos 01
 
Ejemplo de solución de práctica funciones stl
Ejemplo de solución de práctica funciones stlEjemplo de solución de práctica funciones stl
Ejemplo de solución de práctica funciones stl
 
Lenguaje Borland C - Estructuras de Control
Lenguaje Borland C - Estructuras de ControlLenguaje Borland C - Estructuras de Control
Lenguaje Borland C - Estructuras de Control
 
Funciones definidas por el usuario
Funciones definidas por el usuarioFunciones definidas por el usuario
Funciones definidas por el usuario
 
Funciones C++ modificado
Funciones C++ modificadoFunciones C++ modificado
Funciones C++ modificado
 
Funcionesclase1
Funcionesclase1Funcionesclase1
Funcionesclase1
 
Estructuras de control en la POO
Estructuras de control en la POOEstructuras de control en la POO
Estructuras de control en la POO
 
Funciones de Cadenas/ Computación para ingenieros
Funciones de Cadenas/ Computación para ingenierosFunciones de Cadenas/ Computación para ingenieros
Funciones de Cadenas/ Computación para ingenieros
 
Semana 2 Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)
Semana 2   Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)Semana 2   Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)
Semana 2 Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)
 
Funciones en c++
Funciones en c++Funciones en c++
Funciones en c++
 
Funciones
FuncionesFunciones
Funciones
 
Script de Punteros a Funciones
Script de Punteros a FuncionesScript de Punteros a Funciones
Script de Punteros a Funciones
 
Curso basico c sharp
Curso basico c sharpCurso basico c sharp
Curso basico c sharp
 
Estructura basica para_c_
Estructura basica para_c_Estructura basica para_c_
Estructura basica para_c_
 

Ähnlich wie JavaScript no es Vietnam

Ähnlich wie JavaScript no es Vietnam (20)

Reactividad en Angular, React y VueJS
Reactividad en Angular, React y VueJSReactividad en Angular, React y VueJS
Reactividad en Angular, React y VueJS
 
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
PARADIGMAS FP  Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONAPARADIGMAS FP  Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
 
Javascript no es vietnam
Javascript no es vietnamJavascript no es vietnam
Javascript no es vietnam
 
Javascript OOP
Javascript OOPJavascript OOP
Javascript OOP
 
ECMAScript 6
ECMAScript 6ECMAScript 6
ECMAScript 6
 
Clase 5 funciones en javaScript
Clase 5 funciones en javaScriptClase 5 funciones en javaScript
Clase 5 funciones en javaScript
 
Angular Conceptos Practicos 2
Angular Conceptos Practicos 2Angular Conceptos Practicos 2
Angular Conceptos Practicos 2
 
07 funciones
07 funciones07 funciones
07 funciones
 
2 f programas
2 f programas2 f programas
2 f programas
 
2 f programas
2 f programas2 f programas
2 f programas
 
Curso AngularJS - 7. temas avanzados
Curso AngularJS - 7. temas avanzadosCurso AngularJS - 7. temas avanzados
Curso AngularJS - 7. temas avanzados
 
Por pagar
Por pagarPor pagar
Por pagar
 
JSDays Desarrolla tu primera API
JSDays Desarrolla tu primera APIJSDays Desarrolla tu primera API
JSDays Desarrolla tu primera API
 
Curso de Desarrollo Web 2
Curso de Desarrollo Web 2Curso de Desarrollo Web 2
Curso de Desarrollo Web 2
 
APIREST LARAVEL Y PHP.pptx
APIREST LARAVEL Y PHP.pptxAPIREST LARAVEL Y PHP.pptx
APIREST LARAVEL Y PHP.pptx
 
Desarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo QuilónDesarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo Quilón
 
Gwt III - Avanzado
Gwt III - AvanzadoGwt III - Avanzado
Gwt III - Avanzado
 
Creación de Builders y DSL's con Groovy
Creación de Builders y DSL's con GroovyCreación de Builders y DSL's con Groovy
Creación de Builders y DSL's con Groovy
 
Taller desarrollo de apis
Taller desarrollo de apisTaller desarrollo de apis
Taller desarrollo de apis
 
Resumen java
Resumen javaResumen java
Resumen java
 

Mehr von Alex Casquete

45 F#antastic minutes!
45 F#antastic minutes!45 F#antastic minutes!
45 F#antastic minutes!
Alex Casquete
 

Mehr von Alex Casquete (6)

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

Kürzlich hochgeladen

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 

Kürzlich hochgeladen (15)

Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptx
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmeril
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 

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
  • 21.
  • 22.
  • 23. MicroCharlas CatDotNet 26 de julio 2012