SlideShare une entreprise Scribd logo
1  sur  29
Télécharger pour lire hors ligne
ENLARGE YOUR
BACKBONE PROJECT
COMMENT ORGANISER SON PROJET DE FAÇON MODULAIRE ?
PrésentéparNicolasCARLO( )etFabienBERNARD( )@nicoespeon @fabien0102
KIKON EST ?
NICOLAS CARLO
VPofEngineering
FABIEN BERNARD
CTO
SAYKOIKON FAIT ?
Jeu socialsur le thème du vin dans lequelon peut
acheter en vrailes bouteilles que l'on produitvirtuellement
En HTML 5…‘‘full-stack JavaScript’’
Backbone.js + Marionette
Node.js + MongoDB
Grunt, Mocha, Yeoman, …
LES GARS, CE SOIR ON FAIT UN PROTO !
- UN MANAGER UN PEU TROP CONFIANT
//Probablementàl'arrache,dansun`main.js`FTW
//Note-pasbesoinderoutagepournousdonconfaitsans=)
$(function(){
//(…)
//Onpréparenosbouteilles
varbottlesModel=Backbone.Model.extend({...});
varbottlesCollection=Backbone.Collection.extend({...});
varbottlesView=Backbone.View.extend({...});
varbottlesCollectionView=Backbone.View.extend({...});
//(…)
//Etoninitialisetoutlemonde!
varmyBottlesList=newbottlesCollection();
myBottlesList.fetch();
varmyBottlesListView=newbottlesCollectionView({
LE LENDEMAIN
- AKA THE HANGOVER
$(function(){
//(…)
//Onpréparenosbouteilles
varbottlesModel=Backbone.Model.extend({...});
varbottlesCollection=Backbone.Collection.extend({...});
varbottlesView=Backbone.View.extend({...});
varbottlesCollectionView=Backbone.View.extend({...});
//Onpréparenosbâtiments
varbuildingsModel=Backbone.Model.extend({...});
varbuildingsCollection=Backbone.Collection.extend({...});
varbuildingsView=Backbone.View.extend({...});
varbuildingsCollectionView=Backbone.View.extend({...});
//Onpréparenoscépages
varcepagesModel=Backbone.Model.extend({...});
varcepagesCollection=Backbone.Collection.extend({...});
TIENS, C'EST DRÔLE...
parfois çaplante, parfois çapasse…
quand j'enlève ce boutde code y'atoutquiplante !
je retrouve plus où on acodé cette boite de dialogue ?!
faudraitp'têtr qu'on mette des tests unit... oh wait!
le soleilse lève dehors =)
IL FAUT S'ORGANISER!
YAKA SÉPARER LES
FICHIERS PAR TYPES
CONCRÈTEMENT, ÇA DONNE QUOI ?
app/
main.js
models/
bottles.js
buildings.js
collections/
views/
tests/(parce-qu'ilfautpas déconner non plus)
THE GOOD PARTS =)
On yvoitplus clair quand même !
Les tests sontisolés
Facile de trouver des exemples pour cette archi
THE BOF PARTS =/
L'achitecture du code ne reflète pas vraimentnos ‘‘modules’’
Etmon style, ilestpas modulaire mon style ?
Pis faudrapas oublier :
beware ladépendance entre les ‘‘modules’’
LES QUESTIONS À SE POSER
- MERCI ADDY OSMANI O/
Aquelpointce module estinstantanémentré-utilisable ?
Mes modules peuvent-ils exister indépendamment?
Mes modules peuvent-ils être testés indépendamment?
Mon application n'est-elle pas trop étroitementliée ?
Siune partie de mon applifail, est-ce-que touts'écroule ?
NOTRE SOLUTION
(PROPOSÉE)
LA THÉORIE
Source- (inspiredbyN.Zakas)http://scaleapp.org/
UN DOSSIER = UN MODULE
- ETPICÉTOUT !
app/
main.js
main.less
modules/
bottles/
bottles.js
bottles.less
models/
collections/
views/
bottles.views.composite.js
bottles.views.item.js
templates/
tests/
EN PRATIQUE
LES ÉLÉMENTS DE BOTTLES
//bottles.model.js
//Uneseuledépendance->ApplicationCore
define(["app"],function(app){
returnBackbone.Model.extend({...});
});
//bottles.views.item.js
//Uneseuledépendance->ApplicationCore
define(["app"],function(app){
returnBackbone.Marionette.ItemView.extend({...});
});
EN PRATIQUE
LE MODULE BOTTLES
//bottles.js
define([
"app",
//Lemodèle
"bottles/models/bottles",
//Lesvues
"bottles/views/bottles.views.item"
],function(app,Model,ItemView){
//Initialiselemoduleaveclesméthodesdebase.
varBottles=app.module();
//OnspécifienosAPI
Bottles.Model=Model.extend({...});
Bottles.Views.Item=ItemView.extend({...});
EN PRATIQUE
LE MAIN.JS
//main.js
define([
"app",
//Lesmodules
"bottles/bottles.js"
],function(app,Bottles){
//Initialiselemoduleaveclesméthodesdebase.
varmyBottlesList=newBottles.Collection();
myBottlesList.fetch();
varmyBottlesListView=newBottles.Views.Collection({
collection:myBottlesList
});
myBottlesListView.appendTo("#bottom-bar");
});
UN MODULE C'EST COMME UN ENFANT
- MERCI MONSIEUR ZAKAS O/
Les modules doiventgarder les mains dans leurs poches
On ne touche pas au DOM des autres
On ne touche pas aux méthodes des autres
Les modules demandent, ils ne prennentpas
Les modules ne laissentpas traîner leurs jouets : pas de
variables globales, encapsulation
Les modules ne parlentpas àdes étrangers : on ne parle pas
directementaux autres modules
NOS OUTILS
REQUIRE.JS
GESTION DE DÉPENDANCES + OPTIMIZER AVEC R.JS
Détermine les dépendances de chaque boutde code
Re-compile ces dépendances en un seulfichier JS optimisé
NOM DE CODE BRAIN.JS
NOTRE PATTERN MEDIATOR À NOUS
Tour de contrôle des modules
Centralise lacommunication = découplage des modules
Écoute les événements intéressants -Backbone.Event
Trigger d'autres événements pour déclencher des actions
MARIONETTE.JS
ENTRE AUTRES UTILITAIRES
Boite àoutilindispensable pour gérer des vues de plus en plus
complexes
Abstraction + cache de l'UI
Simplifier laconf.
Enregistrer de requests pour découpler son code
Sinon y'aChaplinaussisibesoin d'aller plus loin
ABSTRACTION + CACHE DE L'UI
<divclass="builds__menu">
<ulclass="builds__menu__tabs">
<lidata-ui="tab">Bâtiments</li>
<lidata-ui="tab">Décorations</li>
</ul>
</div>
<!--(…)-->
returnBackbone.Marionette.ItemView.extend({
ui:{
"tab":"[data-ui~=tab]"
},
events:{
"click@ui.tab":"switchTab"
}
//(…)
highlightTabs:function(){
this.ui.tab.each(function(){
//Dosomethingawesome!
});
SIMPLIFICATION DE LA CONF.
returnBackbone.Collection.extend({
events:{
"click":"displayName"
}
appEvents:{
"bottles:do:setName":"setName"
}
//(…)
initialize:function(){
Marionette.bindEntityEvents(this,app,Marionette.getOption(this,"app
Events"));
}
setName:function(appellation,name){
ENREGISTRER DES REQUESTS
returnBackbone.Collection.extend({
requests:{
getCategories:function(){
//Retrievecategories…
returncategories;
}
},
//(…)
initialize:function(){
app.reqres.setHandler("builds:getCategories",this.requests.getCategori
es,this);
}
//Pendantcetemps,ailleursdanslecode
varbuildsCategories=app.request("builds:getCategories");
//(…)
AXES D'AMÉLIORATION
Améliorer l'init. des modules dans le main
Multiples Brain.js, parce-que çagrossitvite
Différents ‘‘channels’’ pour les événements
Des suggestions ?
Comment organiser un gros projet backbone

Contenu connexe

En vedette

Petit faune Creation olfactive
Petit faune Creation olfactivePetit faune Creation olfactive
Petit faune Creation olfactiveCinquième Sens
 
Simon Lighting Ensembles - Kuma Istanium LED
Simon Lighting Ensembles - Kuma Istanium LEDSimon Lighting Ensembles - Kuma Istanium LED
Simon Lighting Ensembles - Kuma Istanium LEDMktlighting
 
2012 10-23-conférence les affaires - eric taillefer
2012 10-23-conférence les affaires - eric taillefer2012 10-23-conférence les affaires - eric taillefer
2012 10-23-conférence les affaires - eric tailleferetaillefer
 
Internet : connaître les bases techniques
Internet : connaître les bases techniquesInternet : connaître les bases techniques
Internet : connaître les bases techniquesBeer Bergman
 
Panoramadeslicenceslibres 101127115826-phpapp01
Panoramadeslicenceslibres 101127115826-phpapp01Panoramadeslicenceslibres 101127115826-phpapp01
Panoramadeslicenceslibres 101127115826-phpapp01jozai
 
Staegiaeri 1 0
Staegiaeri 1 0Staegiaeri 1 0
Staegiaeri 1 0luamira247
 
Etude - L'économie de la communication globale.
Etude - L'économie de la communication globale.Etude - L'économie de la communication globale.
Etude - L'économie de la communication globale.Thierry Zenou
 
LE DUAL SIM ALCATEL ONE TOUCH : COMMENT CA MARCHE ?
LE DUAL SIM ALCATEL ONE TOUCH : COMMENT CA MARCHE ?LE DUAL SIM ALCATEL ONE TOUCH : COMMENT CA MARCHE ?
LE DUAL SIM ALCATEL ONE TOUCH : COMMENT CA MARCHE ?ALCATEL ONE TOUCH FR
 
Kaggle Tradeshift Challenge
Kaggle Tradeshift ChallengeKaggle Tradeshift Challenge
Kaggle Tradeshift ChallengeMatthieu Scordia
 
Réinventer le commerce pour le conso numericus
Réinventer le commerce pour le conso numericus Réinventer le commerce pour le conso numericus
Réinventer le commerce pour le conso numericus Microsoft Ideas
 
Cambios Organizacionales Riviera
Cambios Organizacionales RivieraCambios Organizacionales Riviera
Cambios Organizacionales RivieraRicardo Meza
 
Detournement de marques
Detournement de marquesDetournement de marques
Detournement de marquesMarc Avenel
 
WEBXDN2012 - Community Management
WEBXDN2012 - Community ManagementWEBXDN2012 - Community Management
WEBXDN2012 - Community Managementwebxdn
 
La Maison Du Cheik
La Maison Du CheikLa Maison Du Cheik
La Maison Du Cheiksoudangael
 

En vedette (20)

Petit faune Creation olfactive
Petit faune Creation olfactivePetit faune Creation olfactive
Petit faune Creation olfactive
 
Simon Lighting Ensembles - Kuma Istanium LED
Simon Lighting Ensembles - Kuma Istanium LEDSimon Lighting Ensembles - Kuma Istanium LED
Simon Lighting Ensembles - Kuma Istanium LED
 
Premiers pas
Premiers pasPremiers pas
Premiers pas
 
2012 10-23-conférence les affaires - eric taillefer
2012 10-23-conférence les affaires - eric taillefer2012 10-23-conférence les affaires - eric taillefer
2012 10-23-conférence les affaires - eric taillefer
 
Apunte 1
Apunte 1Apunte 1
Apunte 1
 
Internet : connaître les bases techniques
Internet : connaître les bases techniquesInternet : connaître les bases techniques
Internet : connaître les bases techniques
 
Panoramadeslicenceslibres 101127115826-phpapp01
Panoramadeslicenceslibres 101127115826-phpapp01Panoramadeslicenceslibres 101127115826-phpapp01
Panoramadeslicenceslibres 101127115826-phpapp01
 
Staegiaeri 1 0
Staegiaeri 1 0Staegiaeri 1 0
Staegiaeri 1 0
 
Sistemas de soporte
Sistemas de soporteSistemas de soporte
Sistemas de soporte
 
Etude - L'économie de la communication globale.
Etude - L'économie de la communication globale.Etude - L'économie de la communication globale.
Etude - L'économie de la communication globale.
 
LE DUAL SIM ALCATEL ONE TOUCH : COMMENT CA MARCHE ?
LE DUAL SIM ALCATEL ONE TOUCH : COMMENT CA MARCHE ?LE DUAL SIM ALCATEL ONE TOUCH : COMMENT CA MARCHE ?
LE DUAL SIM ALCATEL ONE TOUCH : COMMENT CA MARCHE ?
 
Bastardo press kit fr
Bastardo press kit frBastardo press kit fr
Bastardo press kit fr
 
Kaggle Tradeshift Challenge
Kaggle Tradeshift ChallengeKaggle Tradeshift Challenge
Kaggle Tradeshift Challenge
 
Réinventer le commerce pour le conso numericus
Réinventer le commerce pour le conso numericus Réinventer le commerce pour le conso numericus
Réinventer le commerce pour le conso numericus
 
Cambios Organizacionales Riviera
Cambios Organizacionales RivieraCambios Organizacionales Riviera
Cambios Organizacionales Riviera
 
Detournement de marques
Detournement de marquesDetournement de marques
Detournement de marques
 
WEBXDN2012 - Community Management
WEBXDN2012 - Community ManagementWEBXDN2012 - Community Management
WEBXDN2012 - Community Management
 
Ivan y oscar aviones copia
Ivan y oscar aviones   copiaIvan y oscar aviones   copia
Ivan y oscar aviones copia
 
La Maison Du Cheik
La Maison Du CheikLa Maison Du Cheik
La Maison Du Cheik
 
power point luz
power point luzpower point luz
power point luz
 

Similaire à Comment organiser un gros projet backbone

Cours yeoman backbone box2d
Cours yeoman backbone box2dCours yeoman backbone box2d
Cours yeoman backbone box2dhugomallet
 
Developpement_dun_site_web_Developpement.pdf
Developpement_dun_site_web_Developpement.pdfDeveloppement_dun_site_web_Developpement.pdf
Developpement_dun_site_web_Developpement.pdfSofianeHassine2
 
Developpement dun site_web_developpement
Developpement dun site_web_developpementDeveloppement dun site_web_developpement
Developpement dun site_web_developpementmosalah38
 
Les générateurs de code, pour se simplifier la vie au quotidien
Les générateurs de code, pour se simplifier la vie au quotidienLes générateurs de code, pour se simplifier la vie au quotidien
Les générateurs de code, pour se simplifier la vie au quotidienNicolas Carlo
 
OBJIS Congo présente 10 reperes cle du developpeur java
OBJIS Congo présente 10 reperes cle du developpeur javaOBJIS Congo présente 10 reperes cle du developpeur java
OBJIS Congo présente 10 reperes cle du developpeur javaDouglas MBIANDOU
 
JCertif 2012 : Maven par la pratique
JCertif 2012 : Maven par la pratiqueJCertif 2012 : Maven par la pratique
JCertif 2012 : Maven par la pratiqueRossi Oddet
 
La mobilité dans Drupal
La mobilité dans DrupalLa mobilité dans Drupal
La mobilité dans DrupalAdyax
 
Intégration continue & Qualité logicielle
Intégration continue & Qualité logicielleIntégration continue & Qualité logicielle
Intégration continue & Qualité logicielleDavid Buros
 
Node.js, le pavé dans la mare
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mareValtech
 
20111006 bonnes pratiques-gi_g_v1
20111006 bonnes pratiques-gi_g_v120111006 bonnes pratiques-gi_g_v1
20111006 bonnes pratiques-gi_g_v1Gilles Guirand
 
ASFA - Organisation et Méthodologie du projet COLSA
ASFA - Organisation et Méthodologie du projet COLSAASFA - Organisation et Méthodologie du projet COLSA
ASFA - Organisation et Méthodologie du projet COLSAFrédéric Sagez
 
Devops for mobile iOS/Android
Devops for mobile iOS/AndroidDevops for mobile iOS/Android
Devops for mobile iOS/AndroidCedric Gatay
 
Déploiement automatique d'app iOS et/ou Android
Déploiement automatique d'app iOS et/ou AndroidDéploiement automatique d'app iOS et/ou Android
Déploiement automatique d'app iOS et/ou AndroidFlorian Chauveau
 
Lbv Dev Meetup #2
 Lbv Dev Meetup #2 Lbv Dev Meetup #2
Lbv Dev Meetup #2LbvDev
 
vue j'avais pas vu !!
vue j'avais pas vu !!vue j'avais pas vu !!
vue j'avais pas vu !!Manuel Adele
 
Vue, j’avais pas vu !
Vue, j’avais pas vu !Vue, j’avais pas vu !
Vue, j’avais pas vu !Bruno Bonnin
 
Trucs et astuces pour rendre votre application Windows Phone 8 plus visible
Trucs et astuces pour rendre votre application Windows Phone 8 plus visibleTrucs et astuces pour rendre votre application Windows Phone 8 plus visible
Trucs et astuces pour rendre votre application Windows Phone 8 plus visibleMicrosoft
 
J'ai fait une app native en React Native
J'ai fait une app native en React NativeJ'ai fait une app native en React Native
J'ai fait une app native en React NativeCocoaHeads France
 

Similaire à Comment organiser un gros projet backbone (20)

Cours yeoman backbone box2d
Cours yeoman backbone box2dCours yeoman backbone box2d
Cours yeoman backbone box2d
 
Developpement_dun_site_web_Developpement.pdf
Developpement_dun_site_web_Developpement.pdfDeveloppement_dun_site_web_Developpement.pdf
Developpement_dun_site_web_Developpement.pdf
 
Developpement dun site_web_developpement
Developpement dun site_web_developpementDeveloppement dun site_web_developpement
Developpement dun site_web_developpement
 
Les générateurs de code, pour se simplifier la vie au quotidien
Les générateurs de code, pour se simplifier la vie au quotidienLes générateurs de code, pour se simplifier la vie au quotidien
Les générateurs de code, pour se simplifier la vie au quotidien
 
OBJIS Congo présente 10 reperes cle du developpeur java
OBJIS Congo présente 10 reperes cle du developpeur javaOBJIS Congo présente 10 reperes cle du developpeur java
OBJIS Congo présente 10 reperes cle du developpeur java
 
De legacy à symfony
De legacy à symfonyDe legacy à symfony
De legacy à symfony
 
JCertif 2012 : Maven par la pratique
JCertif 2012 : Maven par la pratiqueJCertif 2012 : Maven par la pratique
JCertif 2012 : Maven par la pratique
 
La mobilité dans Drupal
La mobilité dans DrupalLa mobilité dans Drupal
La mobilité dans Drupal
 
Intégration continue & Qualité logicielle
Intégration continue & Qualité logicielleIntégration continue & Qualité logicielle
Intégration continue & Qualité logicielle
 
Node.js, le pavé dans la mare
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mare
 
20111006 bonnes pratiques-gi_g_v1
20111006 bonnes pratiques-gi_g_v120111006 bonnes pratiques-gi_g_v1
20111006 bonnes pratiques-gi_g_v1
 
ASFA - Organisation et Méthodologie du projet COLSA
ASFA - Organisation et Méthodologie du projet COLSAASFA - Organisation et Méthodologie du projet COLSA
ASFA - Organisation et Méthodologie du projet COLSA
 
Devops for mobile iOS/Android
Devops for mobile iOS/AndroidDevops for mobile iOS/Android
Devops for mobile iOS/Android
 
Déploiement automatique d'app iOS et/ou Android
Déploiement automatique d'app iOS et/ou AndroidDéploiement automatique d'app iOS et/ou Android
Déploiement automatique d'app iOS et/ou Android
 
Lbv Dev Meetup #2
 Lbv Dev Meetup #2 Lbv Dev Meetup #2
Lbv Dev Meetup #2
 
Backbonejs presentation
Backbonejs presentationBackbonejs presentation
Backbonejs presentation
 
vue j'avais pas vu !!
vue j'avais pas vu !!vue j'avais pas vu !!
vue j'avais pas vu !!
 
Vue, j’avais pas vu !
Vue, j’avais pas vu !Vue, j’avais pas vu !
Vue, j’avais pas vu !
 
Trucs et astuces pour rendre votre application Windows Phone 8 plus visible
Trucs et astuces pour rendre votre application Windows Phone 8 plus visibleTrucs et astuces pour rendre votre application Windows Phone 8 plus visible
Trucs et astuces pour rendre votre application Windows Phone 8 plus visible
 
J'ai fait une app native en React Native
J'ai fait une app native en React NativeJ'ai fait une app native en React Native
J'ai fait une app native en React Native
 

Plus de Nicolas Carlo

The Secrets of Hexagonal Architecture
The Secrets of Hexagonal ArchitectureThe Secrets of Hexagonal Architecture
The Secrets of Hexagonal ArchitectureNicolas Carlo
 
Hexagonal architecture & Elixir
Hexagonal architecture & ElixirHexagonal architecture & Elixir
Hexagonal architecture & ElixirNicolas Carlo
 
À la découverte des Observables - HumanTalks Paris 2017
À la découverte des Observables - HumanTalks Paris 2017À la découverte des Observables - HumanTalks Paris 2017
À la découverte des Observables - HumanTalks Paris 2017Nicolas Carlo
 
À la découverte des observables
À la découverte des observablesÀ la découverte des observables
À la découverte des observablesNicolas Carlo
 
Testing Marionette.js Behaviors
Testing Marionette.js BehaviorsTesting Marionette.js Behaviors
Testing Marionette.js BehaviorsNicolas Carlo
 
Chaining and function composition with lodash / underscore
Chaining and function composition with lodash / underscoreChaining and function composition with lodash / underscore
Chaining and function composition with lodash / underscoreNicolas Carlo
 
Kanban et Game Development avec Trello
Kanban et Game Development avec TrelloKanban et Game Development avec Trello
Kanban et Game Development avec TrelloNicolas Carlo
 
Plop : un micro-générateur pour se simplifier la vie au quotidien
Plop : un micro-générateur pour se simplifier la vie au quotidienPlop : un micro-générateur pour se simplifier la vie au quotidien
Plop : un micro-générateur pour se simplifier la vie au quotidienNicolas Carlo
 
Tester ses Behaviors Marionette.js
Tester ses Behaviors Marionette.jsTester ses Behaviors Marionette.js
Tester ses Behaviors Marionette.jsNicolas Carlo
 
Chaining et composition de fonctions avec lodash / underscore
Chaining et composition de fonctions avec lodash / underscoreChaining et composition de fonctions avec lodash / underscore
Chaining et composition de fonctions avec lodash / underscoreNicolas Carlo
 

Plus de Nicolas Carlo (10)

The Secrets of Hexagonal Architecture
The Secrets of Hexagonal ArchitectureThe Secrets of Hexagonal Architecture
The Secrets of Hexagonal Architecture
 
Hexagonal architecture & Elixir
Hexagonal architecture & ElixirHexagonal architecture & Elixir
Hexagonal architecture & Elixir
 
À la découverte des Observables - HumanTalks Paris 2017
À la découverte des Observables - HumanTalks Paris 2017À la découverte des Observables - HumanTalks Paris 2017
À la découverte des Observables - HumanTalks Paris 2017
 
À la découverte des observables
À la découverte des observablesÀ la découverte des observables
À la découverte des observables
 
Testing Marionette.js Behaviors
Testing Marionette.js BehaviorsTesting Marionette.js Behaviors
Testing Marionette.js Behaviors
 
Chaining and function composition with lodash / underscore
Chaining and function composition with lodash / underscoreChaining and function composition with lodash / underscore
Chaining and function composition with lodash / underscore
 
Kanban et Game Development avec Trello
Kanban et Game Development avec TrelloKanban et Game Development avec Trello
Kanban et Game Development avec Trello
 
Plop : un micro-générateur pour se simplifier la vie au quotidien
Plop : un micro-générateur pour se simplifier la vie au quotidienPlop : un micro-générateur pour se simplifier la vie au quotidien
Plop : un micro-générateur pour se simplifier la vie au quotidien
 
Tester ses Behaviors Marionette.js
Tester ses Behaviors Marionette.jsTester ses Behaviors Marionette.js
Tester ses Behaviors Marionette.js
 
Chaining et composition de fonctions avec lodash / underscore
Chaining et composition de fonctions avec lodash / underscoreChaining et composition de fonctions avec lodash / underscore
Chaining et composition de fonctions avec lodash / underscore
 

Comment organiser un gros projet backbone