79
10h40 - 11h30 - La Seine B Du JavaScript propre ? Challenge Accepted!

JavaScript Devoxx France 2013

Embed Size (px)

Citation preview

Page 1: JavaScript Devoxx France 2013

10h40 - 11h30 - La Seine B

Du JavaScript propre ?

Challenge Accepted!

Page 2: JavaScript Devoxx France 2013

27 au 29 mars 2013

Du JavaScript propre ?

Challenge Accepted!

Julien JakubowskiOCTO Technology

@jak78

Romain LinsolasSociété Générale

@romaintaz

Page 3: JavaScript Devoxx France 2013

Romain Linsolas

Développeur Java & WebArchitecte Technique

@romaintaz

Page 4: JavaScript Devoxx France 2013

Julien Jakubowski

Développeur Java & Web depuis 10 ans

@jak78

Page 5: JavaScript Devoxx France 2013

Nous ne sommes pas…

Des gourous JavaScript

John Resig - jQuery

Douglas Crockford – JSLint,"JavaScript, The Good Parts"

Page 6: JavaScript Devoxx France 2013

Parlons de JavaScript entre Javaïstes

JavaScript is to Java as Hamster is to Ham

http://coding.smashingmagazine.com/2009/07/29/misunderstanding-markup-xhtml-2-comic-strip/

Page 7: JavaScript Devoxx France 2013

Nous allons aussi parler de…

Darth Vader MaroillesBière

Page 8: JavaScript Devoxx France 2013

Pourquoi cette présentation ?

Page 9: JavaScript Devoxx France 2013

En 2003

Page 10: JavaScript Devoxx France 2013

Le JavaScript est partout !

Runtime le plus distribuéMobilitéMême côté serveur ( , …)

Page 11: JavaScript Devoxx France 2013

Les grands du web

Page 12: JavaScript Devoxx France 2013

Les grands du web

Page 13: JavaScript Devoxx France 2013

Nouveaux besoins

Les utilisateurs veulent des applications vivantes, réactives et dynamiques !

Enjeu de qualitéVolume de code important

Fini de jouer !

Page 14: JavaScript Devoxx France 2013

100,000 lignes de code JavaScript ?

Young man hidden behind table - © 2011 Richard Hernández Arrondo

Page 15: JavaScript Devoxx France 2013

Le JavaScriptc'estSALEsurprenant

Pourquoi ça fait peur ?

Page 16: JavaScript Devoxx France 2013

WAT ?> [] + []""

> [] + {}[object Object]

> {} + []0

> {} + {}NaN

> ++[[]][+[]]+[+[]] === "10"true

Page 17: JavaScript Devoxx France 2013

WA

T???WA

T???Gary Bernhardthttp://codemash.orghttps://www.destroyallsoftware.com/talks/wat

Page 18: JavaScript Devoxx France 2013

Darth Vader MaroillesBière

Page 19: JavaScript Devoxx France 2013

Autre problème JavaScript

WAT

???

Page 20: JavaScript Devoxx France 2013

Pollution de l'espace de nommage

Page 21: JavaScript Devoxx France 2013

Scope global par défaut

Page 22: JavaScript Devoxx France 2013

Tout est public par défaut

Page 23: JavaScript Devoxx France 2013

Darth Vader MaroillesBière

Page 24: JavaScript Devoxx France 2013

Et ce n'est pas tout !

Le mot clé this (plus surprenant que sale)Ordre de déclaration de var

Etc.

Page 25: JavaScript Devoxx France 2013

Mais le plus sale

Pollution de l'espace de nommageTout est global par défautCode non testé

Page 26: JavaScript Devoxx France 2013

Oui mais…

Page 27: JavaScript Devoxx France 2013
Page 28: JavaScript Devoxx France 2013

Nous allons aussi parler de…

Darth Vader MaroillesBière

Page 29: JavaScript Devoxx France 2013

Comment coderproprement 100,000 lignes

en JavaScript ?

Page 30: JavaScript Devoxx France 2013

On pourrait éviter le JavaScript…Déléguer

• GWT• JSF• Vaadin• Etc.

Page 31: JavaScript Devoxx France 2013

On peut aussi "améliorer" JavaScript

Langage web orienté objet pour combler les lacunes de JavaScript

Un JavaScript à l’écriture simplifiée

Page 32: JavaScript Devoxx France 2013

Exemple de CoffeeScriptJavaScript

Page 33: JavaScript Devoxx France 2013

Architectures MV*

Page 34: JavaScript Devoxx France 2013

Architecture MVC classique

ClientServeur

Asynchrone

<html>+JS

Controller

ViewModel

Page 35: JavaScript Devoxx France 2013

Mes besoins aujourd'hui

Temps de réponse instantanéGestion de réseaux lents (mobiles…)Mode déconnecté

Page 36: JavaScript Devoxx France 2013

Architecture MV* en JavaScript

ClientServeur

View Controller

Model

Page 37: JavaScript Devoxx France 2013

Question implémentation

Frameworks optionnels, mais aident beaucoupPas encore de standard

Page 38: JavaScript Devoxx France 2013

Modulariser

Page 39: JavaScript Devoxx France 2013

Qu'est-ce qu'un module ?

Représente un ensemble de codeIsolation – faible couplagePrésente une interface

Page 40: JavaScript Devoxx France 2013

Un module basique - Présentation

Page 41: JavaScript Devoxx France 2013

Un module basique

Page 42: JavaScript Devoxx France 2013

Un module basique

Page 43: JavaScript Devoxx France 2013

Un module basique

Page 44: JavaScript Devoxx France 2013

Un module basique

Page 45: JavaScript Devoxx France 2013

Un module basique

Page 46: JavaScript Devoxx France 2013

Un module basique

Page 47: JavaScript Devoxx France 2013

Espace de nommage

Page 48: JavaScript Devoxx France 2013

Diviser en plusieurs fichiers .js ?

Temps de chargementPas de gestion des dépendances

Page 49: JavaScript Devoxx France 2013

AMD, Asynchronous Module Definition

Définition de dépendances

jQuery

beers.js

Mustache

Page 50: JavaScript Devoxx France 2013

AMD, Asynchronous Module Definition

Chargements parallèles, à la demande

jQuery Mustache

beers.js

sodas.js

jQuerybeers.

jsMustache

Page 51: JavaScript Devoxx France 2013

Eviter les parties sales

http://www.gettyimages.fr/detail/photo/hands-of-a-blacksmith-in-his-studio-image-libre-de-droits/109889293

Page 52: JavaScript Devoxx France 2013

JsLint

Détection des ugly partsEquivalent à PMD / Checkstyle / FindBugs pour JSIntégration dans les IDE

Page 53: JavaScript Devoxx France 2013

Intégration dans Eclipse

Page 54: JavaScript Devoxx France 2013

Expressivité

http://www.gettyimages.fr/detail/photo/detail-of-sheet-music-image-libre-de-droits/AA004801

Page 55: JavaScript Devoxx France 2013

Qu'est-ce qu'un code expressif ?

C'est un code simple, concis,lisible

Page 56: JavaScript Devoxx France 2013

Mauvais exemple

Pollution, mauvaise lisibilité=> SALE

Page 57: JavaScript Devoxx France 2013

Avec

Pas de pollutionLisibilité accrueCode propre

Page 58: JavaScript Devoxx France 2013

jQuery, c'est surtout :• Lisibilité du code, expressivité• Simplification de ce qui est utile : manipulation du DOM, Ajax…

Mais aussi :• Structuration du code en plugins• Nombreux plugins existants

Page 59: JavaScript Devoxx France 2013

Templates

Page 60: JavaScript Devoxx France 2013

A la main

Page 61: JavaScript Devoxx France 2013

Avec template (Mustache.js)

Page 62: JavaScript Devoxx France 2013

Outils de templating

Mustache

Page 63: JavaScript Devoxx France 2013

Tests automatisésTests automatisés

Page 64: JavaScript Devoxx France 2013

Tests d'IHM

Conditions réellesPas vraiment adapté au TDD

Selenium Windmill

Page 65: JavaScript Devoxx France 2013

TDD pour JavaScript

En Java En JavaScript

TestNG

Page 66: JavaScript Devoxx France 2013

Tests avec Jasmine

Page 67: JavaScript Devoxx France 2013

Ecosystème

University « Le fantôme, le zombie et Testacular… »

Jean-Laurent De Morlhon et Pierre Gayvallet

Page 68: JavaScript Devoxx France 2013

TDD en JavaScript

Page 69: JavaScript Devoxx France 2013

Automatisation

Page 70: JavaScript Devoxx France 2013

Détecter et alerter

Quand un test échoueQuand une partie sale est utiliséeS'il y a une erreur de syntaxe

Jasmine JsLint Google Closure Compiler

Intégration dans Maven, Jenkins ou Sonar

Page 71: JavaScript Devoxx France 2013

Intégration continue avec Jenkins

http://localhost:8080/job/Test%20Jasmine/1/consol

Page 72: JavaScript Devoxx France 2013

Analyse qualité avec Sonar

Page 73: JavaScript Devoxx France 2013

D'autres outils utiles

Page 74: JavaScript Devoxx France 2013

100,000 lignes de JavaScript ?

ModulesMV* Parties sales

évitées

ExpressivitéAutomatisatio

nTests

Page 75: JavaScript Devoxx France 2013

Le monde des bisounours ?

Page 76: JavaScript Devoxx France 2013

Le monde des bisounours ? Oui mais non !

IntégrationPérennitéApprentissage

Page 77: JavaScript Devoxx France 2013

Businessman sitting at desk with feet up - Paul Bradbury

Page 78: JavaScript Devoxx France 2013

RéférencesEloquent JavaScript

http://eloquentjavascript.net/contents.html

JavaScript Gardenhttp://bonsaiden.github.com/JavaScript-Garden/

Learning Advanced JavaScript - J. Resighttp://ejohn.org/apps/learn/

JavaScript: the Good Parts - D. Crockford

Page 79: JavaScript Devoxx France 2013

Questions ?

@jak78 @romaintaz