Upload
sidneyfilho
View
575
Download
5
Embed Size (px)
Citation preview
Client UndertowQuando boas práticas não são
recomendadas.
Sobre Mim• Desenvolvedor – Há 11 anos e contando…
• Arquiteto– 5 anos e contando…
• Empresário– 3 anos e contando…
Velho desenvolvimento. Novos paradigmas.
Será que sabemos realmente o que
estamos fazendo?
Vou contar um pouco do que funcionou para mim e que pode
funcionar para você também!
Hum, vou fazer igual naquele CRUD é o mesmo pattern!
Dois idiomas, mesmo pensamento?
C# JavascriptServidor Cliente
Tipagem Forte Tipagem Fraca
Estática Dinâmica
OOP Prototypal Inheritage
Higher-order Functions TRUE First-Class Functions
Que droga! Porque esse IF não funciona?
What The Fu…• '' == '0' // false• 0 == '' // true• 0 == '0' // true• false == 'false' // false• false == '0' // true• false == undefined // false• false == null // false• null == undefined // true• " \t\r\n " == 0 // true
Sintaxe não é gosto pessoal!
return
{
ok: false
};
• OK p/ C#• UNDEFINED!
return {
ok: true
};
• OK p/ C#• OK p/ JavaScript
Var or not Varfunction teste(){ y = 1; }
alert(y); // 1
function teste(){ var y = 1; }
alert(y); // undefined
Funções são: objetos, arrays, …
function teste(){}
teste.id = 1;
teste[“nome”]=“abc”;
teste[0] = 12;
var t = new teste();
/* Javascript OK */
/* Nem preciso escrever aquí porque sabemos
que não funciona no C# */
“Prefer object composition to class inheritance”
Gang of 4
Prototypal Inheritancefunction object(o) {
function F(){}
F.prototype = o;
return new F();
}
var parent = {a: 1};
var child = object(parent);
alert(child.a); // 1
alert(child.hasOwnProperty(“a”)); // false
Mixinsvar Bolo={};
var ingrediente1 = {a: 1, b: 2, c: 3};
var ingrediente2 = {d: 4, e: 5, f: 6};
var ingrediente3 = {g: 7, h: 8, i: 9};
for(var item1 in ingrediente1)
Bolo[item1] = ingrediente1[item1];
for(var item2 in ingrediente2)
Bolo[item2] = ingrediente2[item2];
for(var item3 in ingrediente3)
Bolo[item3] = ingrediente3[item3];
alert(Bolo.g) // 7
/* Bolo contém todas as
propriedades dos
ingredientes 1, 2, 3 */
Closure
function outer(){
var local = 1;
return function(){
return local;
};
}
Bolo.prototype = ingrediente1;
Namespaces// Criando um exemplo de System.Web.UI
var System = {};
System.Web = {};
System.Web.UI = {};
System.Web.UI.MeuPlugin={
Factory:{
add:function(obj){}
remove:function(obj){}
}
}
One-Executing Anonymous Function
(function (i){
alert(i);
})(10);
• Permite usar closure;
• Só funciona uma unica vez;
Com tantos recursos novos e diferentes, precisamos
aprender a reaprender!
Se você estivesse começando aprender a desenvolver hoje e optasse por Javascript,
suas soluções seriam as mesmas?
Design Patterns
• Mixins• Closure• Modules
• Self-Overwriting• Augmentation• SuperMethods
• Package• Modules• Namespaces
Além dos tradicionais Observer, Factory, Iterator, Proxy, devido a capacidade desta linguagem podemos pensar em novos e possiveis, como:
“Desenvolvimento de software é a arte de criar maquinas escrevendo poesias!”
- Sidney Lima FIlho
Obrigado!