SlideShare uma empresa Scribd logo
JavaScript
  ORGANIZANDO O



Nando Vieira   http://nandovieira.com.br
@fnando



fnando.vieira@gmail.com



nandovieira.com
http://hellobits.com
howto.
http://howtocode.com.br
http://codeplane.com.br
 Evento Front End SP - Organizando o Javascript
JavaScript
É, atualmente, uma das linguagens de programação mais
importantes do mundo.
Dos 10 repositórios mais populares do
Github, 7 repositórios* são relacionados a
JavaScript.
*twitter bootstrap, node.js, jquery, html5 boilerplate, impress.js, backbone.js, chosen.
Fama
Mas mesmo com essa explosão, ainda temos códigos muito ruins.
Dicas
Você verá algumas dicas que podem ajudar a escrever códigos
melhores, e torná-lo um *rockstar.

*Embora isso seja possível, não é uma garantia. Além disso, é melhor ser um profissional que rockstar.
#1 Aprenda JavaScript
JavaScript
Uma linguagem extremamente poderosa e flexível.
Conheça a linguagem
*Saiba closures, funções, escopo de variáveis, this e como
modificá-lo, pseudo-orientação a objetos, prototype e,
provavelmente, muito mais coisas.

*Ninguém disse que a vida seria fácil. Quando você decidiu se tornar um desenvolvedor web, assumiu o
compromisso de não se tornar um dinossauro.
*jQuery não é JavaScript
É apenas um framework que abstrai e facilita a manipulação do
Document Object Model.

*Quero morrer quando pergunto para alguém se ele sabe JavaScript e a resposta é “Eu sei jQuery”. Pretty... jQuery
não é JavaScript!
Aprenda a linguagem
Ela não é uma linguagem tão grande e difícil como você pensa.
http://developer.mozilla.org
http://howtocode.com.br
http://w3scho... melhor não!
http://w3fools.com
#2 JavaScript Patterns
Patterns
   vs

Standards
Patterns não são regras.
São apenas repetições conhecidas que podem ser documentadas.
 Evento Front End SP - Organizando o Javascript
Module pattern
Permite emular a visibilidade de métodos e atributos.
var Counter = {
     count: 0
   , increment: function() {
       this.count += 1;
     }
                               O atributo Counter.count
   , decrement: function() {
                               pode ser manipulado
       this.count -= 1;        indiscriminadamente.
     }
   , reset: function() {
       this.count = 0;
     }
};
var Counter = (function(){
  var count = 0;

  return {
       increment: function() {
         count += 1;
       }
     , decrement: function() {
                                 A variável `count` só pode
         count -= 1;
                                 ser manipulada através de
       }                         nossa API pública.
     , reset: function() {
         count = 0;
       }
     , count: function() {
         return count;
       }
  };
})();
Module pattern
Permite injetar dependências.
<script type="text/javascript" src="jquery.js">
</script>

<script type="text/javascript">
  jQuery.noConflict();
</script>

<script type="text/javascript" src="jquery.plugin.js">
</script>
$.fn.plugin = function() {   jQuery.noConflict()
   // do something           restaura o valor anterior da
};                           variável global $.
;(function($){
  $.fn.plugin = function() {   Injetando o jQuery como
     // do something           dependência garantimos o
  };                           funcionamento do plugin.
})(jQuery);
Facade pattern
Permite criar APIs mais simples e desacopladas, abstraindo a
implementação original.
// jquery
$("p").css({color: "red"});

// mootools
$$("p").setStyle("color", "red");

// prototype
$$("p").invoke("setStyle", {color: "red"});

// dojotoolkit
dojo.query("p").style({color: "red"});
exemplo utópico
function dom(selector) {
   this.selector = selector;
};

dom.prototype.css = function(style) {};
dom.prototype.remove = function() {};
dom.prototype.addClass = function(className) {};
dom.prototype.removeClass = function(className) {};

dom.find = function(selector) {
   return new dom(selector);
};
dom.find("p").css({   Não importa qual framework
    color: "red"      você esteja usando, a API
});                   foi abstraída.
dom.find("p").css({   A abstração pode ser
    color: "red"      extremamente complexa e
});                   trabalhosa.
Mediator pattern
Faz a intermediação entre diferentes componentes, de modo que
eles possam interagir indiretamente.
 Evento Front End SP - Organizando o Javascript
var Chat = {};
Chat.channel = new Channel();
Chat.participants = new Participants(Chat.channel);
Chat.messages = new Messages(Chat.channel);
Chat.inputMessage = new InputMessage(Chat.channel);
Chat.connection = new Connection(Chat.channel);
function Participants(channel) {
  this.channel = channel;

    // Listen to the connected signal and add a new
    // user to the participants list.
    this.channel.on("connected", this.onConnected);

    // Listen to the disconnected signal and remove
    // user from the participants list.
    this.channel.on("disconnected", this.onDisconnected);
}
function Messages(channel) {
  this.channel = channel;

    // Listen to the new message signal and add message
    // to the list.
    this.channel.on("new message", this.onNewMessage);

    // Listen to the connected signal and tell everybody
    // that somebody has joined the room.
    this.channel.on("connected", this.onConnected);
}
function InputMessage(channel) {
  this.channel = channel;
}

InputMessage.prototype.send = function(message, user) {
  // Send message through WebSockets maybe

     // Then notify that a new message has been sent
     this.channel.publish("new message", message, user);
};
function Channel() {
  this.events = {};
}

Channel.prototype.on = function(event, callback) {
   this.events[event] || (this.events[event] = []);
   this.events[event].push(callback);
};

Channel.prototype.publish = function(event) {
  var args = [].slice.call(arguments, 1);
  this.events[event] || (this.events[event] = []);

     this.events[event].forEach(function(callback){
       callback.apply(null, args);
     });
};
Uma coisa de cada vez
O seu código deve fazer uma coisa de cada vez e deve fazê-la
bem!
"invite_friends" : function() {
  var resizeLoader = function() {
      $("#loader").css("width", $(".places").width());
      $("#loader").css("height", $(".places").height()-18);
  }
  resizeLoader();


 var resizeTimer;


 $(window).bind('resize', function() {
      clearTimeout(resizeTimer);
      resizeTimer = setTimeout(resizeLoader, 50);
  });


 $("a[href=#automatic_invite]").click(function(e){
      SomeApp.utils.stopPropagation(e);


      if(!$(this).parents(".tab_title:first").is(".active")) {
          $(".tab_title:first")
            .toggleClass("active");


          $(".tab_title:last")
            .toggleClass("active");


          $("#automatic")
            .toggleClass("hidden");
          $("#manual")
            .toggleClass("hidden");
      }
  });


 var suffixes = {
      "gmail": "@gmail.com",
      "yahoo": "",
      "live": "@hotmail.com",
      "other": ""
.toggleClass("active");
                $("#automatic")
                  .toggleClass("hidden");
                $("#manual")
                  .toggleClass("hidden");
            }
        });


        if (location.hash == '#manual_invite') {
            $(".tab_title:first")
                .toggleClass("active");
            $(".tab_title:last")
              .toggleClass("active");
            $("#automatic")
                .toggleClass("hidden");
            $("#manual")
                .toggleClass("hidden");
        }
        //mudando a aba do serviço automaticamente
        var service_mapping = {0: 'gmail', 1:'yahoo', 2:'live'};
        var services_radio_button = "";
        for (key in service_mapping) {
          if ($("#services")[0].places[key].checked) {
                services_radio_button = service_mapping[key];
            }
        }


        $("#service-suffix").html(suffixes[services_radio_button]);
        $("#services fieldset").attr("class", services_radio_button);
        $("p#service_instructions").addClass("hidden");
        $("#service-select").addClass("hidden");
        if(services_radio_button == "yahoo") {
          $("p#service_instructions").removeClass("hidden");
        } else if (services_radio_button == "other") {
            $("#service-select").removeClass("hidden");
        }
    }
}
 Evento Front End SP - Organizando o Javascript
354 linhas
Redimensionamento de janelas, gerenciamento de abas, AJAX,
validação, autenticação, criação de lista de contatos no DOM, filtros
e, provavelmente, muito mais!
Bad jQuery ou Bad developer?
O jQuery é bom porque é simples de usar. Mas ele também é ruim
porque é simples de usar.
$("#page").load("/some/file.html");
$("#page").load("/some/file.html");




       Seleção do
       elemento no DOM
$("#page").load("/some/file.html");




           Requisição AJAX
$("#page").load("/some/file.html");




        Manipulação do DOM
Uma coisa de cada vez
O seu código deve fazer uma coisa de cada vez e deve fazê-la
bem!
#3 MVC/MV*
O pattern MVC separa as aplicações em
três partes conhecidas como Model,
Views e Controllers.
Model
 Gerencia os dados, persistência e
regras de negócio de sua aplicação.
View
  Renderiza os modelos e permite a
interação do usuário com a aplicação.
Controller
Faz a mediação das interações do
usuário com as views e modelos.
Existem poucas implementações que
seguem o MVC proposto pela Xerox PARC
à risca.
A maioria dos frameworks implementa
uma variação (ou nem implementam).
MVVM Model View ViewModel
MVP   Model View Presenter
MVA   Model View Adapter
MV*   Model View Variation
No JavaScript, tivemos uma explosão de
frameworks nos últimos 2 anos.
Existem mais de 50 frameworks que
querem virar “o queridinho” dos
desenvolvedores.
http://addyosmani.github.com/todomvc/
Crie seu próprio framework
Isso fará com que você entenda o problema a fundo e dará o
conhecimento para resolver o problema. Depois jogue tudo fora.
models




usuário   views (UI)   controllers
#4 DICAS GERAIS
Crie arquivos separados
Crie diversos arquivos, cada um com sua responsabilidade. Você
sempre pode concatenar os arquivos com ferramentas como o
Grunt.
Documente o seu código
Sempre que possível, documente o seu código. Você não vai
lembrar porque fez isso na semana que vem.
Injete os elementos em cada componente
Em vez de assumir que o elemento está sempre na página, injete-o
através do construtor. Isso permitirá escrever testes mais
desacomplados.
Testes
Códigos mais simples e com menos responsabilidades são
infinitamente mais simples de testar.
Aprenda JavaScript
Você só será um desenvolvedor melhor quando realmente souber o
JavaScript.
#4 *LIVE CODING
*Não importa o quanto digam que fazer live coding sempre dá errado, eu não aprendo!
#5 *OBRIGADO
*Aqui é a parte que vocês batem palmas (ou vaiam) e fazem perguntas (ou vão embora).

Mais conteúdo relacionado

Mais procurados (20)

PDF
Java script aula 08 - formulários
Cristiano Pires Martins
 
PDF
jQuery Simplificando o JavaScript
Everaldo Wanderlei Uavniczak
 
PDF
jQuery na Prática!
José Alexandre Macedo
 
PDF
Hooks, o condimento mágico e escondido do WordPress
Zé Fontainhas
 
KEY
PHPubSP Object Calisthenics aplicado ao PHP
Guilherme Blanco
 
ODP
Introdução a jQuery
Rodrigo Aramburu
 
PDF
PHP para Adultos: Clean Code e Object Calisthenics
Guilherme Blanco
 
PDF
modernizando a arquitertura de sua aplicação
Antonio Spinelli
 
PDF
Criando controle de acesso com php e my sql
Paulo Damas
 
PDF
JS Experience 2017 - Web APIs que você provavelmente não sabia que existiam
iMasters
 
PPT
Aprenda jQuery 1.3
Helton Marinho
 
PPTX
Introdução ao jquery
Yuri Costa
 
PDF
Object Calisthenics: relaxe e escreva códigos simples
Otávio Calaça Xavier
 
PDF
Escrevendo plugins JQuery
Zigotto Tecnologia
 
PDF
ODIG - Javascript, DOM Elements e jQuery
Marketing Digital ODIG
 
KEY
JQuery Alagoinhas Dev Day - UNEB
Luciano Borges
 
PDF
Java script aula 06 - dom
Cristiano Pires Martins
 
KEY
Javascript - Princípios da linguagem e utilização de frameworks
Bruno Abrantes
 
PDF
Java script aula 07 - eventos
Cristiano Pires Martins
 
PDF
JS Experience 2017 - Javascript Funcional
iMasters
 
Java script aula 08 - formulários
Cristiano Pires Martins
 
jQuery Simplificando o JavaScript
Everaldo Wanderlei Uavniczak
 
jQuery na Prática!
José Alexandre Macedo
 
Hooks, o condimento mágico e escondido do WordPress
Zé Fontainhas
 
PHPubSP Object Calisthenics aplicado ao PHP
Guilherme Blanco
 
Introdução a jQuery
Rodrigo Aramburu
 
PHP para Adultos: Clean Code e Object Calisthenics
Guilherme Blanco
 
modernizando a arquitertura de sua aplicação
Antonio Spinelli
 
Criando controle de acesso com php e my sql
Paulo Damas
 
JS Experience 2017 - Web APIs que você provavelmente não sabia que existiam
iMasters
 
Aprenda jQuery 1.3
Helton Marinho
 
Introdução ao jquery
Yuri Costa
 
Object Calisthenics: relaxe e escreva códigos simples
Otávio Calaça Xavier
 
Escrevendo plugins JQuery
Zigotto Tecnologia
 
ODIG - Javascript, DOM Elements e jQuery
Marketing Digital ODIG
 
JQuery Alagoinhas Dev Day - UNEB
Luciano Borges
 
Java script aula 06 - dom
Cristiano Pires Martins
 
Javascript - Princípios da linguagem e utilização de frameworks
Bruno Abrantes
 
Java script aula 07 - eventos
Cristiano Pires Martins
 
JS Experience 2017 - Javascript Funcional
iMasters
 

Semelhante a Evento Front End SP - Organizando o Javascript (20)

PDF
Backbone.js + Rails - Front-end e back-end conectados
Henrique Gogó
 
PDF
Integração do Flex com PHP através do AMFPHP
elliando dias
 
PDF
Ajax em java
Maurício Linhares
 
PDF
LabMM3 - Aula teórica 09
Carlos Santos
 
PPTX
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Willian Magalhães
 
PPTX
Criando serviços com AngularJS
Rodrigo Branas
 
KEY
JQuery
Luciano Borges
 
PDF
Realtime com node.js e socket.io
Caio Ribeiro Pereira
 
PPTX
Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1
Thyago Maia
 
PPTX
LambdaDay: Backbone.js
Giovanni Bassi
 
PDF
Ecommerce, mais simples do que parece
Impacta Eventos
 
PPT
Aula javascript
Gabriel Moura
 
PDF
Aplicacoes Rapidas Para Web Com Django
Diemesleno Carvalho
 
PDF
(A10) LabMM3 - JavaScript - Subalgoritmos
Carlos Santos
 
PDF
Programando para programadores: Desafios na evolução de um Framework
Pablo Dall'Oglio
 
PDF
Play Framework - FLISOL
grupoweblovers
 
PDF
Programação funcional em JavaScript: como e por quê?
Arthur Xavier
 
PDF
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Rodrigo Urubatan
 
PDF
Java script1
Evandro Manara Miletto
 
PDF
Evolução e futuro do uso de paradigmas no JavaScript
Jean Carlo Emer
 
Backbone.js + Rails - Front-end e back-end conectados
Henrique Gogó
 
Integração do Flex com PHP através do AMFPHP
elliando dias
 
Ajax em java
Maurício Linhares
 
LabMM3 - Aula teórica 09
Carlos Santos
 
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Willian Magalhães
 
Criando serviços com AngularJS
Rodrigo Branas
 
Realtime com node.js e socket.io
Caio Ribeiro Pereira
 
Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1
Thyago Maia
 
LambdaDay: Backbone.js
Giovanni Bassi
 
Ecommerce, mais simples do que parece
Impacta Eventos
 
Aula javascript
Gabriel Moura
 
Aplicacoes Rapidas Para Web Com Django
Diemesleno Carvalho
 
(A10) LabMM3 - JavaScript - Subalgoritmos
Carlos Santos
 
Programando para programadores: Desafios na evolução de um Framework
Pablo Dall'Oglio
 
Play Framework - FLISOL
grupoweblovers
 
Programação funcional em JavaScript: como e por quê?
Arthur Xavier
 
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Rodrigo Urubatan
 
Evolução e futuro do uso de paradigmas no JavaScript
Jean Carlo Emer
 
Anúncio

Último (8)

PDF
SENAC Modelagem de Dados - Aula02 curso de ADS.pdf
JhonataLamim1
 
PDF
Apresentação sobre Funções Matemáticas e o módulo.pdf
Gabriel Vitor
 
PDF
IA - Grupo J.pdf para trabalho de inteligencia artificial
juanaraujo139815
 
PDF
Zeebo: Uma brevíssima introdução. - David Glotz
BluePanther6
 
PPTX
NR-13.pptx treinamento sobre a norma regulamentadora
SimoniBorges1
 
PDF
Apresentação de Manipulação de strings em Python .pdf
Gabriel Vitor
 
PDF
SENAC Modelagem de Dados - Aula01 do curso de ADSpdf
JhonataLamim1
 
PDF
Assistente de Suporte e Manutenção de Computadores.pdf
EudesAlvesPessoa
 
SENAC Modelagem de Dados - Aula02 curso de ADS.pdf
JhonataLamim1
 
Apresentação sobre Funções Matemáticas e o módulo.pdf
Gabriel Vitor
 
IA - Grupo J.pdf para trabalho de inteligencia artificial
juanaraujo139815
 
Zeebo: Uma brevíssima introdução. - David Glotz
BluePanther6
 
NR-13.pptx treinamento sobre a norma regulamentadora
SimoniBorges1
 
Apresentação de Manipulação de strings em Python .pdf
Gabriel Vitor
 
SENAC Modelagem de Dados - Aula01 do curso de ADSpdf
JhonataLamim1
 
Assistente de Suporte e Manutenção de Computadores.pdf
EudesAlvesPessoa
 
Anúncio

Evento Front End SP - Organizando o Javascript

  • 1. JavaScript ORGANIZANDO O Nando Vieira http://nandovieira.com.br
  • 7. JavaScript É, atualmente, uma das linguagens de programação mais importantes do mundo.
  • 8. Dos 10 repositórios mais populares do Github, 7 repositórios* são relacionados a JavaScript. *twitter bootstrap, node.js, jquery, html5 boilerplate, impress.js, backbone.js, chosen.
  • 9. Fama Mas mesmo com essa explosão, ainda temos códigos muito ruins.
  • 10. Dicas Você verá algumas dicas que podem ajudar a escrever códigos melhores, e torná-lo um *rockstar. *Embora isso seja possível, não é uma garantia. Além disso, é melhor ser um profissional que rockstar.
  • 12. JavaScript Uma linguagem extremamente poderosa e flexível.
  • 13. Conheça a linguagem *Saiba closures, funções, escopo de variáveis, this e como modificá-lo, pseudo-orientação a objetos, prototype e, provavelmente, muito mais coisas. *Ninguém disse que a vida seria fácil. Quando você decidiu se tornar um desenvolvedor web, assumiu o compromisso de não se tornar um dinossauro.
  • 14. *jQuery não é JavaScript É apenas um framework que abstrai e facilita a manipulação do Document Object Model. *Quero morrer quando pergunto para alguém se ele sabe JavaScript e a resposta é “Eu sei jQuery”. Pretty... jQuery não é JavaScript!
  • 15. Aprenda a linguagem Ela não é uma linguagem tão grande e difícil como você pensa.
  • 21. Patterns vs Standards
  • 22. Patterns não são regras. São apenas repetições conhecidas que podem ser documentadas.
  • 24. Module pattern Permite emular a visibilidade de métodos e atributos.
  • 25. var Counter = { count: 0 , increment: function() { this.count += 1; } O atributo Counter.count , decrement: function() { pode ser manipulado this.count -= 1; indiscriminadamente. } , reset: function() { this.count = 0; } };
  • 26. var Counter = (function(){ var count = 0; return { increment: function() { count += 1; } , decrement: function() { A variável `count` só pode count -= 1; ser manipulada através de } nossa API pública. , reset: function() { count = 0; } , count: function() { return count; } }; })();
  • 28. <script type="text/javascript" src="jquery.js"> </script> <script type="text/javascript"> jQuery.noConflict(); </script> <script type="text/javascript" src="jquery.plugin.js"> </script>
  • 29. $.fn.plugin = function() { jQuery.noConflict() // do something restaura o valor anterior da }; variável global $.
  • 30. ;(function($){ $.fn.plugin = function() { Injetando o jQuery como // do something dependência garantimos o }; funcionamento do plugin. })(jQuery);
  • 31. Facade pattern Permite criar APIs mais simples e desacopladas, abstraindo a implementação original.
  • 32. // jquery $("p").css({color: "red"}); // mootools $$("p").setStyle("color", "red"); // prototype $$("p").invoke("setStyle", {color: "red"}); // dojotoolkit dojo.query("p").style({color: "red"});
  • 33. exemplo utópico function dom(selector) { this.selector = selector; }; dom.prototype.css = function(style) {}; dom.prototype.remove = function() {}; dom.prototype.addClass = function(className) {}; dom.prototype.removeClass = function(className) {}; dom.find = function(selector) { return new dom(selector); };
  • 34. dom.find("p").css({ Não importa qual framework color: "red" você esteja usando, a API }); foi abstraída.
  • 35. dom.find("p").css({ A abstração pode ser color: "red" extremamente complexa e }); trabalhosa.
  • 36. Mediator pattern Faz a intermediação entre diferentes componentes, de modo que eles possam interagir indiretamente.
  • 38. var Chat = {}; Chat.channel = new Channel(); Chat.participants = new Participants(Chat.channel); Chat.messages = new Messages(Chat.channel); Chat.inputMessage = new InputMessage(Chat.channel); Chat.connection = new Connection(Chat.channel);
  • 39. function Participants(channel) { this.channel = channel; // Listen to the connected signal and add a new // user to the participants list. this.channel.on("connected", this.onConnected); // Listen to the disconnected signal and remove // user from the participants list. this.channel.on("disconnected", this.onDisconnected); }
  • 40. function Messages(channel) { this.channel = channel; // Listen to the new message signal and add message // to the list. this.channel.on("new message", this.onNewMessage); // Listen to the connected signal and tell everybody // that somebody has joined the room. this.channel.on("connected", this.onConnected); }
  • 41. function InputMessage(channel) { this.channel = channel; } InputMessage.prototype.send = function(message, user) { // Send message through WebSockets maybe // Then notify that a new message has been sent this.channel.publish("new message", message, user); };
  • 42. function Channel() { this.events = {}; } Channel.prototype.on = function(event, callback) { this.events[event] || (this.events[event] = []); this.events[event].push(callback); }; Channel.prototype.publish = function(event) { var args = [].slice.call(arguments, 1); this.events[event] || (this.events[event] = []); this.events[event].forEach(function(callback){ callback.apply(null, args); }); };
  • 43. Uma coisa de cada vez O seu código deve fazer uma coisa de cada vez e deve fazê-la bem!
  • 44. "invite_friends" : function() { var resizeLoader = function() { $("#loader").css("width", $(".places").width()); $("#loader").css("height", $(".places").height()-18); } resizeLoader(); var resizeTimer; $(window).bind('resize', function() { clearTimeout(resizeTimer); resizeTimer = setTimeout(resizeLoader, 50); }); $("a[href=#automatic_invite]").click(function(e){ SomeApp.utils.stopPropagation(e); if(!$(this).parents(".tab_title:first").is(".active")) { $(".tab_title:first") .toggleClass("active"); $(".tab_title:last") .toggleClass("active"); $("#automatic") .toggleClass("hidden"); $("#manual") .toggleClass("hidden"); } }); var suffixes = { "gmail": "@gmail.com", "yahoo": "", "live": "@hotmail.com", "other": ""
  • 45. .toggleClass("active"); $("#automatic") .toggleClass("hidden"); $("#manual") .toggleClass("hidden"); } }); if (location.hash == '#manual_invite') { $(".tab_title:first") .toggleClass("active"); $(".tab_title:last") .toggleClass("active"); $("#automatic") .toggleClass("hidden"); $("#manual") .toggleClass("hidden"); } //mudando a aba do serviço automaticamente var service_mapping = {0: 'gmail', 1:'yahoo', 2:'live'}; var services_radio_button = ""; for (key in service_mapping) { if ($("#services")[0].places[key].checked) { services_radio_button = service_mapping[key]; } } $("#service-suffix").html(suffixes[services_radio_button]); $("#services fieldset").attr("class", services_radio_button); $("p#service_instructions").addClass("hidden"); $("#service-select").addClass("hidden"); if(services_radio_button == "yahoo") { $("p#service_instructions").removeClass("hidden"); } else if (services_radio_button == "other") { $("#service-select").removeClass("hidden"); } } }
  • 47. 354 linhas Redimensionamento de janelas, gerenciamento de abas, AJAX, validação, autenticação, criação de lista de contatos no DOM, filtros e, provavelmente, muito mais!
  • 48. Bad jQuery ou Bad developer? O jQuery é bom porque é simples de usar. Mas ele também é ruim porque é simples de usar.
  • 50. $("#page").load("/some/file.html"); Seleção do elemento no DOM
  • 52. $("#page").load("/some/file.html"); Manipulação do DOM
  • 53. Uma coisa de cada vez O seu código deve fazer uma coisa de cada vez e deve fazê-la bem!
  • 55. O pattern MVC separa as aplicações em três partes conhecidas como Model, Views e Controllers.
  • 56. Model Gerencia os dados, persistência e regras de negócio de sua aplicação.
  • 57. View Renderiza os modelos e permite a interação do usuário com a aplicação.
  • 58. Controller Faz a mediação das interações do usuário com as views e modelos.
  • 59. Existem poucas implementações que seguem o MVC proposto pela Xerox PARC à risca.
  • 60. A maioria dos frameworks implementa uma variação (ou nem implementam).
  • 61. MVVM Model View ViewModel MVP Model View Presenter MVA Model View Adapter MV* Model View Variation
  • 62. No JavaScript, tivemos uma explosão de frameworks nos últimos 2 anos.
  • 63. Existem mais de 50 frameworks que querem virar “o queridinho” dos desenvolvedores.
  • 65. Crie seu próprio framework Isso fará com que você entenda o problema a fundo e dará o conhecimento para resolver o problema. Depois jogue tudo fora.
  • 66. models usuário views (UI) controllers
  • 68. Crie arquivos separados Crie diversos arquivos, cada um com sua responsabilidade. Você sempre pode concatenar os arquivos com ferramentas como o Grunt.
  • 69. Documente o seu código Sempre que possível, documente o seu código. Você não vai lembrar porque fez isso na semana que vem.
  • 70. Injete os elementos em cada componente Em vez de assumir que o elemento está sempre na página, injete-o através do construtor. Isso permitirá escrever testes mais desacomplados.
  • 71. Testes Códigos mais simples e com menos responsabilidades são infinitamente mais simples de testar.
  • 72. Aprenda JavaScript Você só será um desenvolvedor melhor quando realmente souber o JavaScript.
  • 73. #4 *LIVE CODING *Não importa o quanto digam que fazer live coding sempre dá errado, eu não aprendo!
  • 74. #5 *OBRIGADO *Aqui é a parte que vocês batem palmas (ou vaiam) e fazem perguntas (ou vão embora).