SlideShare une entreprise Scribd logo
1  sur  21
Télécharger pour lire hors ligne
Organización	de	aplicaciones
con	Backbone.js
		
Diego	Cardozo
github.com/diegocard/backbone-presentation
Objetivos
Esta	charla	no	es	un	tutorial	de	Backbone
Se	centra	en	el	diseño	de	clientes	web	inteligentes
Vamos	a	usar	Backbone	como	ejemplo
Vemos	conceptos	independientes	de	la	tecnología
Aplicables	a	otras	herramientas
Y	de	paso	aprendemos	algo	de	Backbone
¿Que	espero	que	se	lleven?
Conceptos	útiles	para	diseñar	clientes	complejos
Conocimientos	básicos	de	Backbone
Ganas	de	aprender	más	
Para	los	que	conocen	Backbone
Buenas	prácticas
Combinación	con	otras	herramientas
Agenda
1.	 Introducción
2.	 Arquitectura
3.	 Ejemplo
4.	 Componentes	de	Backbone
5.	 Estructurar	una	aplicación
Introducción	(1)
Los	clientes	web	cuentan	cada	vez	con	mas	recursos
Permite	construir	clientes	mas	inteligentes
Pero	los	clientes	complejos	con	jQuery...
Son	difíciles	de	construír
Carecen	de	estructura
Dificultan	la	reutilización
Crear	tu	propia	estructura	sería	reinventar	la	rueda
Introducción	(2)
Introducción	(3)
Backbone	brinda
Estructura	al	código	JavaScript	en	el	cliente
Varias	utilidades	reutilizables
Básicamente	es	un	framework	MV*
Organizamos	el	código	en	distintos	componentes
Modelos
Colecciones
Vistas
Templates
Routers
Arquitectura	(1)
Arquitectura	(2)
Ventajas
Mantenimiento	más	sencillo
Distribución	de	carga	
Comienzo	del	desarrollo	más	ágil
La	interfaz	es	simplemente	otro	cliente
Se	presta	muy	bien	para	testing
Perfecto	para	combinar	con	aplicaciones	móviles
Ejemplogithub.com/diegocard/backbone-presentation/demo
Componentes	(1)
Modelo
var	User	=	Backbone.Model.extend({
						urlRoot:	'/users'
});
Componentes	(2)
Colección
var	Users	=	Backbone.Collection.extend({
								url:	'/users'
});
Componentes	(3)
Vista
var	UserListView	=	Backbone.View.extend({
				el:	'.page',
				render:	function	()	{
								var	that	=	this;
								var	users	=	new	Users();
								users.fetch({
												success:	function	(users)	{
																var	template	=	_.template(
																				$('#user-list-template').html(),
																				{users:	users.models}
																);
																that.$el.html(template);
												}
								})
				}
});
Componentes	(4)
Manejo	de	eventos
var	UserEditView	=	Backbone.View.extend({
				el:	'.page',
				events:	{
								'submit	.edit-user-form':	'saveUser',
								'click	.delete':	'deleteUser'
				},
				saveUser:	function	(ev)	{
								var	userDetails	=	$(ev.currentTarget).serializeObject();
								var	user	=	new	User();
								user.save(userDetails,	{
												success:	function	(user)	{
																router.navigate('',	{trigger:true});
												}
								});
				}
});
Componentes	(5)
Template
<script	type="text/template"	id="user-list-template">
		<a	href="#/new"	class="btn	btn-primary">New</a>
		<hr	/>
		<table	class="table	striped">
				<thead>
						<tr>
								<th>First	Name</th><th>Last	Name</th><th>Age</th><th></th>
						</tr>
				</thead>
				<tbody>
						<%	_.each(users,	function(user)	{	%>
								<tr>
										<td><%=	htmlEncode(user.get('firstname'))	%></td>
										<td><%=	htmlEncode(user.get('lastname'))	%></td>
										<td><%=	htmlEncode(user.get('age'))	%></td>
										<td><a	class="btn"	href="#/edit/<%=	user.id	%>">Edit</a></td>
								</tr>
						<%	});	%>
				</tbody>
		</table>
</script>
Componentes	(6)
Router
	var	Router	=	Backbone.Router.extend({
					routes:	{
									"":	"home",	
									"edit/:id":	"edit",
									"new":	"edit",
					}
	});
Estructura	(1)
Usar	Backbone	no	es	garantía	de	prolijidad
Se	precisa	estructurar	y	modularizar	la	aplicación
Para	esto	utilizamos	Require.js
Encontré	un	excelente	ejemplo	en:
backbonetutorials.com/organizing-backbone-using-modules
Estructura	(2)
Estructura	sugerida
Raíz
├──	imgs
├──	css
│			└──	style.css
├──	templates
│			├──	projects
│			│			├──	list.html
│			│			└──	edit.html
│			└──	users
│							├──	list.html
│							└──	edit.html
├──	js
│			├──	libs
│			│			├──	jquery
│			│			│			├──	jquery.min.js
│			│			├──	backbone
│			│			│			├──	backbone.min.js
│			│			└──	underscore
│			│			│			├──	underscore.min.js
│			├──	models
│			│			├──	users.js
Estructura	(3)
Ejemplo:	Lista	de	proyectos
define([
		'jquery',
		'underscore',
		'backbone',
		//	Usando	el	plugin	text!	de	Require.js,	
		//	cargamos	las	templates	como	texto	plano
		'text!templates/project/list.html'
],	function($,	_,	Backbone,	projectListTemplate){
		var	ProjectListView	=	Backbone.View.extend({
				el:	$('#container'),
				render:	function(){
						//	Compilamos	la	template	usando	Underscore
						//	y	agregar	la	plantilla	al	elemento	de	la	vista
						var	data	=	{};
						var	compiledTemplate	=	_.template(projectListTemplate,	data);
						this.$el.append(compiledTemplate);
				}
		});
		return	ProjectListView;	//	Retornar	la	vista
});
Recursos
	
	
	
backbonejs.org
backbonetutorials.com
addyosmani.github.io/backbone-fundamentals
github.com/diegocard/backbone-presentation
¿Preguntas?

Contenu connexe

Similaire à Organización de aplicaciones web con Backbone.js

Framework de programacion de paginas web
Framework de programacion de paginas webFramework de programacion de paginas web
Framework de programacion de paginas webGeraldyn De Sousa
 
Creacion de librerias y modulos
Creacion de librerias y modulosCreacion de librerias y modulos
Creacion de librerias y modulosFernando Solis
 
Semana6(Framework para diseño y desarrollo web ).pdf
Semana6(Framework para diseño y desarrollo web ).pdfSemana6(Framework para diseño y desarrollo web ).pdf
Semana6(Framework para diseño y desarrollo web ).pdfMiguelAngelCheroGuad1
 
Trade-Off sobre Tecnologías Web
Trade-Off sobre Tecnologías WebTrade-Off sobre Tecnologías Web
Trade-Off sobre Tecnologías WebMiguel Angel Macias
 
BootCamp Online en DevOps (and SecDevOps) de GeeksHubs Academy
BootCamp Online en DevOps (and SecDevOps) de GeeksHubs AcademyBootCamp Online en DevOps (and SecDevOps) de GeeksHubs Academy
BootCamp Online en DevOps (and SecDevOps) de GeeksHubs AcademyTelefónica
 
Eric Evans 2003 - Domain-Driven Design - Tackling Complexity in the Heart of ...
Eric Evans 2003 - Domain-Driven Design - Tackling Complexity in the Heart of ...Eric Evans 2003 - Domain-Driven Design - Tackling Complexity in the Heart of ...
Eric Evans 2003 - Domain-Driven Design - Tackling Complexity in the Heart of ...FidelValeriano1
 
Frameworks MVC para desarrollo de UITES
Frameworks MVC para desarrollo de UITESFrameworks MVC para desarrollo de UITES
Frameworks MVC para desarrollo de UITESJesus Caceres Tello
 
Software basado en Componentes
Software basado en ComponentesSoftware basado en Componentes
Software basado en ComponentesJeissonAlexander7
 
Software basado en Componentes
Software basado en ComponentesSoftware basado en Componentes
Software basado en ComponentesJeissonAlexander7
 
Aplicacion mvc entity_framework_login_membership
Aplicacion mvc entity_framework_login_membershipAplicacion mvc entity_framework_login_membership
Aplicacion mvc entity_framework_login_membershipJose B Flores P
 
Fast tracktothecloud nestorrequesens-itequia-20110331
Fast tracktothecloud nestorrequesens-itequia-20110331Fast tracktothecloud nestorrequesens-itequia-20110331
Fast tracktothecloud nestorrequesens-itequia-20110331MICProductivity
 
Aspect Oriented Programming introduction
Aspect Oriented Programming introductionAspect Oriented Programming introduction
Aspect Oriented Programming introductionMiguel Pastor
 
Desarrollo de Aplicaciones Web con ASP.NET MVC5
Desarrollo de Aplicaciones Web con ASP.NET MVC5Desarrollo de Aplicaciones Web con ASP.NET MVC5
Desarrollo de Aplicaciones Web con ASP.NET MVC5Oscar Gensollen
 

Similaire à Organización de aplicaciones web con Backbone.js (20)

Framework de programacion de paginas web
Framework de programacion de paginas webFramework de programacion de paginas web
Framework de programacion de paginas web
 
Creacion de librerias y modulos
Creacion de librerias y modulosCreacion de librerias y modulos
Creacion de librerias y modulos
 
Semana6(Framework para diseño y desarrollo web ).pdf
Semana6(Framework para diseño y desarrollo web ).pdfSemana6(Framework para diseño y desarrollo web ).pdf
Semana6(Framework para diseño y desarrollo web ).pdf
 
Trade-Off sobre Tecnologías Web
Trade-Off sobre Tecnologías WebTrade-Off sobre Tecnologías Web
Trade-Off sobre Tecnologías Web
 
BootCamp Online en DevOps (and SecDevOps) de GeeksHubs Academy
BootCamp Online en DevOps (and SecDevOps) de GeeksHubs AcademyBootCamp Online en DevOps (and SecDevOps) de GeeksHubs Academy
BootCamp Online en DevOps (and SecDevOps) de GeeksHubs Academy
 
Eric Evans 2003 - Domain-Driven Design - Tackling Complexity in the Heart of ...
Eric Evans 2003 - Domain-Driven Design - Tackling Complexity in the Heart of ...Eric Evans 2003 - Domain-Driven Design - Tackling Complexity in the Heart of ...
Eric Evans 2003 - Domain-Driven Design - Tackling Complexity in the Heart of ...
 
5-Unidad 2: Diseño de Vista-2.2 Para Web
5-Unidad 2: Diseño de Vista-2.2 Para Web5-Unidad 2: Diseño de Vista-2.2 Para Web
5-Unidad 2: Diseño de Vista-2.2 Para Web
 
Frameworks MVC para desarrollo de UITES
Frameworks MVC para desarrollo de UITESFrameworks MVC para desarrollo de UITES
Frameworks MVC para desarrollo de UITES
 
Software basado en Componentes
Software basado en ComponentesSoftware basado en Componentes
Software basado en Componentes
 
Software basado en Componentes
Software basado en ComponentesSoftware basado en Componentes
Software basado en Componentes
 
S01-s1-MVC.pptx
S01-s1-MVC.pptxS01-s1-MVC.pptx
S01-s1-MVC.pptx
 
Web sql
Web sqlWeb sql
Web sql
 
5-Unidad 2: Diseños de Vista-2.2 Para Web
5-Unidad 2: Diseños de Vista-2.2 Para Web5-Unidad 2: Diseños de Vista-2.2 Para Web
5-Unidad 2: Diseños de Vista-2.2 Para Web
 
Aplicacion mvc entity_framework_login_membership
Aplicacion mvc entity_framework_login_membershipAplicacion mvc entity_framework_login_membership
Aplicacion mvc entity_framework_login_membership
 
Fast tracktothecloud nestorrequesens-itequia-20110331
Fast tracktothecloud nestorrequesens-itequia-20110331Fast tracktothecloud nestorrequesens-itequia-20110331
Fast tracktothecloud nestorrequesens-itequia-20110331
 
Aspect Oriented Programming introduction
Aspect Oriented Programming introductionAspect Oriented Programming introduction
Aspect Oriented Programming introduction
 
Bd orientados al objeto
Bd orientados al objetoBd orientados al objeto
Bd orientados al objeto
 
Desarrollo de Aplicaciones Web con ASP.NET MVC5
Desarrollo de Aplicaciones Web con ASP.NET MVC5Desarrollo de Aplicaciones Web con ASP.NET MVC5
Desarrollo de Aplicaciones Web con ASP.NET MVC5
 
Tema 6
Tema 6Tema 6
Tema 6
 
Tema 3
Tema 3Tema 3
Tema 3
 

Plus de Diego Cardozo

El proximo billon de usuarios
El proximo billon de usuariosEl proximo billon de usuarios
El proximo billon de usuariosDiego Cardozo
 
The next billion users
The next billion usersThe next billion users
The next billion usersDiego Cardozo
 
Troubleshooting Ecommerce Performance
 Troubleshooting Ecommerce Performance Troubleshooting Ecommerce Performance
Troubleshooting Ecommerce PerformanceDiego Cardozo
 
Cranking It Up - SuiteWorld 2017
Cranking It Up  - SuiteWorld 2017Cranking It Up  - SuiteWorld 2017
Cranking It Up - SuiteWorld 2017Diego Cardozo
 
Speed Thrills - Suiteworld 2016
Speed Thrills - Suiteworld 2016Speed Thrills - Suiteworld 2016
Speed Thrills - Suiteworld 2016Diego Cardozo
 
Performance in the cloud
Performance in the cloudPerformance in the cloud
Performance in the cloudDiego Cardozo
 
Cómo testear performance sin morir en el intento
Cómo testear performance sin morir en el intentoCómo testear performance sin morir en el intento
Cómo testear performance sin morir en el intentoDiego Cardozo
 
Optimize performance and not die trying
Optimize performance and not die tryingOptimize performance and not die trying
Optimize performance and not die tryingDiego Cardozo
 
Optimizar performance sin morir en el intento
Optimizar performance sin morir en el intentoOptimizar performance sin morir en el intento
Optimizar performance sin morir en el intentoDiego Cardozo
 
How to test performance and not die trying
How to test performance and not die tryingHow to test performance and not die trying
How to test performance and not die tryingDiego Cardozo
 
Testeando performance sin morir en el intento
Testeando performance sin morir en el intentoTesteando performance sin morir en el intento
Testeando performance sin morir en el intentoDiego Cardozo
 
Structuring web applications with Backbone.js
Structuring web applications with Backbone.jsStructuring web applications with Backbone.js
Structuring web applications with Backbone.jsDiego Cardozo
 
Component Based Software Development
Component Based Software DevelopmentComponent Based Software Development
Component Based Software DevelopmentDiego Cardozo
 
Desarrollo de Software Basado en Componentes
Desarrollo de Software Basado en ComponentesDesarrollo de Software Basado en Componentes
Desarrollo de Software Basado en ComponentesDiego Cardozo
 
Single page applications
Single page applicationsSingle page applications
Single page applicationsDiego Cardozo
 
Single Page Applications
Single Page ApplicationsSingle Page Applications
Single Page ApplicationsDiego Cardozo
 

Plus de Diego Cardozo (16)

El proximo billon de usuarios
El proximo billon de usuariosEl proximo billon de usuarios
El proximo billon de usuarios
 
The next billion users
The next billion usersThe next billion users
The next billion users
 
Troubleshooting Ecommerce Performance
 Troubleshooting Ecommerce Performance Troubleshooting Ecommerce Performance
Troubleshooting Ecommerce Performance
 
Cranking It Up - SuiteWorld 2017
Cranking It Up  - SuiteWorld 2017Cranking It Up  - SuiteWorld 2017
Cranking It Up - SuiteWorld 2017
 
Speed Thrills - Suiteworld 2016
Speed Thrills - Suiteworld 2016Speed Thrills - Suiteworld 2016
Speed Thrills - Suiteworld 2016
 
Performance in the cloud
Performance in the cloudPerformance in the cloud
Performance in the cloud
 
Cómo testear performance sin morir en el intento
Cómo testear performance sin morir en el intentoCómo testear performance sin morir en el intento
Cómo testear performance sin morir en el intento
 
Optimize performance and not die trying
Optimize performance and not die tryingOptimize performance and not die trying
Optimize performance and not die trying
 
Optimizar performance sin morir en el intento
Optimizar performance sin morir en el intentoOptimizar performance sin morir en el intento
Optimizar performance sin morir en el intento
 
How to test performance and not die trying
How to test performance and not die tryingHow to test performance and not die trying
How to test performance and not die trying
 
Testeando performance sin morir en el intento
Testeando performance sin morir en el intentoTesteando performance sin morir en el intento
Testeando performance sin morir en el intento
 
Structuring web applications with Backbone.js
Structuring web applications with Backbone.jsStructuring web applications with Backbone.js
Structuring web applications with Backbone.js
 
Component Based Software Development
Component Based Software DevelopmentComponent Based Software Development
Component Based Software Development
 
Desarrollo de Software Basado en Componentes
Desarrollo de Software Basado en ComponentesDesarrollo de Software Basado en Componentes
Desarrollo de Software Basado en Componentes
 
Single page applications
Single page applicationsSingle page applications
Single page applications
 
Single Page Applications
Single Page ApplicationsSingle Page Applications
Single Page Applications
 

Organización de aplicaciones web con Backbone.js