javascript no es vietnam
DESCRIPTION
Presentación utilizada para una de las MicroCharlas del grupo de usuarios CatDotNetTRANSCRIPT
![Page 1: JavaScript no es Vietnam](https://reader035.vdocuments.mx/reader035/viewer/2022070304/54c2df364a7959ec238b4617/html5/thumbnails/1.jpg)
JavaScript no es Vietnam Patrones y pruebas
Alex Casquete
1
![Page 2: JavaScript no es Vietnam](https://reader035.vdocuments.mx/reader035/viewer/2022070304/54c2df364a7959ec238b4617/html5/thumbnails/2.jpg)
ESTE SOY YO
Alex Casquete twitter: acasquete
blog: www.idlebit.es
![Page 3: JavaScript no es Vietnam](https://reader035.vdocuments.mx/reader035/viewer/2022070304/54c2df364a7959ec238b4617/html5/thumbnails/3.jpg)
Hablemos de JavaScript…
![Page 4: JavaScript no es Vietnam](https://reader035.vdocuments.mx/reader035/viewer/2022070304/54c2df364a7959ec238b4617/html5/thumbnails/4.jpg)
JavaScript es…
![Page 5: JavaScript no es Vietnam](https://reader035.vdocuments.mx/reader035/viewer/2022070304/54c2df364a7959ec238b4617/html5/thumbnails/5.jpg)
JavaScript is in the air
![Page 6: JavaScript no es Vietnam](https://reader035.vdocuments.mx/reader035/viewer/2022070304/54c2df364a7959ec238b4617/html5/thumbnails/6.jpg)
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
![Page 7: JavaScript no es Vietnam](https://reader035.vdocuments.mx/reader035/viewer/2022070304/54c2df364a7959ec238b4617/html5/thumbnails/7.jpg)
var myBeer = { “name” : “Moritz”, “take” : function() { alert(“Great!”); }, “displayName” : function() { alert(this.name + “ is my Beer”); }, “drink” : function() { // not implemented } }; myBeer.displayName(); myBeer.drink();
![Page 8: JavaScript no es Vietnam](https://reader035.vdocuments.mx/reader035/viewer/2022070304/54c2df364a7959ec238b4617/html5/thumbnails/8.jpg)
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
![Page 9: JavaScript no es Vietnam](https://reader035.vdocuments.mx/reader035/viewer/2022070304/54c2df364a7959ec238b4617/html5/thumbnails/9.jpg)
Patrón Module
9
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;
}
}
}());
![Page 10: JavaScript no es Vietnam](https://reader035.vdocuments.mx/reader035/viewer/2022070304/54c2df364a7959ec238b4617/html5/thumbnails/10.jpg)
Patrón Mediator
10
Módulo 1
Módulo 2
Módulo 3
Mediator doSomething
done!
![Page 11: JavaScript no es Vietnam](https://reader035.vdocuments.mx/reader035/viewer/2022070304/54c2df364a7959ec238b4617/html5/thumbnails/11.jpg)
Patrón Mediator
11
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; } }; }());
![Page 12: JavaScript no es Vietnam](https://reader035.vdocuments.mx/reader035/viewer/2022070304/54c2df364a7959ec238b4617/html5/thumbnails/12.jpg)
Patrón Façade
12
var module = (function() { var _private = { i:5, 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(); } } } }());
module.facade({run: true, val:10}); //devuelve ‘current value: 10, running’
![Page 13: JavaScript no es Vietnam](https://reader035.vdocuments.mx/reader035/viewer/2022070304/54c2df364a7959ec238b4617/html5/thumbnails/13.jpg)
Patterns For Large-Scale JavaScript
Application Architecture
http://addyosmani.com/largescalejavascript/
Decouple app. architecture w/module,facade &
mediator patterns. Mods publish msgs, mediator
acts as pub/sub mgr & facade handles security
![Page 14: JavaScript no es Vietnam](https://reader035.vdocuments.mx/reader035/viewer/2022070304/54c2df364a7959ec238b4617/html5/thumbnails/14.jpg)
Pruebas
![Page 15: JavaScript no es Vietnam](https://reader035.vdocuments.mx/reader035/viewer/2022070304/54c2df364a7959ec238b4617/html5/thumbnails/15.jpg)
Las pruebas unitarias no son para JavaScript
![Page 16: JavaScript no es Vietnam](https://reader035.vdocuments.mx/reader035/viewer/2022070304/54c2df364a7959ec238b4617/html5/thumbnails/16.jpg)
SI NO PRUEBAS TU CÓDIGO VAS A
CONOCER EL DOLOR
![Page 17: JavaScript no es Vietnam](https://reader035.vdocuments.mx/reader035/viewer/2022070304/54c2df364a7959ec238b4617/html5/thumbnails/17.jpg)
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
![Page 18: JavaScript no es Vietnam](https://reader035.vdocuments.mx/reader035/viewer/2022070304/54c2df364a7959ec238b4617/html5/thumbnails/18.jpg)
Frameworks Testing JavaScript
![Page 19: JavaScript no es Vietnam](https://reader035.vdocuments.mx/reader035/viewer/2022070304/54c2df364a7959ec238b4617/html5/thumbnails/19.jpg)
Un poco de código
![Page 20: JavaScript no es Vietnam](https://reader035.vdocuments.mx/reader035/viewer/2022070304/54c2df364a7959ec238b4617/html5/thumbnails/20.jpg)
Utiliza patrones
No reinventes la rueda
Prueba tu código
20
![Page 21: JavaScript no es Vietnam](https://reader035.vdocuments.mx/reader035/viewer/2022070304/54c2df364a7959ec238b4617/html5/thumbnails/21.jpg)
![Page 22: JavaScript no es Vietnam](https://reader035.vdocuments.mx/reader035/viewer/2022070304/54c2df364a7959ec238b4617/html5/thumbnails/22.jpg)
![Page 23: JavaScript no es Vietnam](https://reader035.vdocuments.mx/reader035/viewer/2022070304/54c2df364a7959ec238b4617/html5/thumbnails/23.jpg)
MicroCharlas CatDotNet 26 de julio 2012