SlideShare una empresa de Scribd logo
1 de 18
AngularJS Patterns: Clean Code
Principio LIFT
● L: Locating: localizar nuestro código
● I: Identify: Identificar el código de un vistazo
● F: Estructura plana, max 7 niveles directorios
● T: Don't repeat yourself
Pautas de nombre
● Nombres que se entiendan, no utilizar
abreviaciones complicadas.
● Archivo: feature.type.js ex: personas.service.js
● Interno: FeatureType ex: PersonasController
● Camel-casting para servicios o factorías
● Directivas: usar un prefijo propio, como: masp-
● Primera minúscula en nombres de archivos o
funciones, pero mayúscula en el nombre de
controlador, servicio, factoría...
Organización ficheros
● directives/
– masp_input_translated/
● masp_input_translated.js
● masp_input_translated.jade
● masp_input_translated.spec.js
● services/
– service.js
● modules/
– sections/
● directives/
● sections.js
● sections.spec.js
● sectionsService.js
● sections.jade
● sections_form.jade
● additionalConcept.js
● additionalConcept.espec.js
● ...
Common
Modul
Single Responsibility: Closures
Módulos: Definición
Declara los módulos sin usar una variable,
usando la sintaxis de los setters y getters.
Setea sólo una vez y usa get para el resto de instancias
Funciones: siempre con nombre
Evitar las funciones anónimas en los callbacks
Controladores
● Usar siempre controllerAs en lugar del clásico controlador
con $scope
● La sintaxis controllerAs usa this dentro de los controladores
que se asocian al $scope
● Considerar usar el $scope en una factory, evitar su uso en el
controlador
● No usar para interaccionar con el DOM o para manipular
datos.
Controladores: Bindeables Arriba
The Revealing Module Pattern
Controladores: Diferir la Lógica
● Difiera la lógica dentro de un controlador delegándola a
servicios y fábricas.
Rutas: Asignando Controladores
Directivas
● 1 directiva por archivo
● Manipulación del DOM dentro de las directivas, aunque si
es posible mejor manipularlo por CSS
● Utilizar un prefijo corto, propio, ej: masp-
● Evitar el uso de directivas por “clase”
● Usa bindToController = true cuando uses controller as con
una directiva cuando quieras asociar el scope exterior al
scope del controller de la directiva.
Resolver dependencias
● Utilitzar el “reload()” dentro de un controlador
● Si hay “query's” impresindibles, cargarlos en el
routeProvider en el “resolve”
Manejo de Excepciones
● Decoratores: Realizar acciones personalizadas
cuando una excepción ocurra.
● Cachadores de excepciones
● Errores de ruta: Mejora la experiencia de
usuario si hay un error de enrutamiento y lo
redirigimos a una pantalla amigable.
Testing
● Naming: archivos finalizados con: .spec.js
● Usaremos Mocha & Chai
● Usaremos Karma como test runner: solo tendremos que
incluir los ficheros que queremos testear
● Usar SinionJS para “stubbing and Spying” = simular AJAX,
servers, timers...
● Usar PhantomJS como Headless Browser
Masterpkg test or masterpkg test-dev & karma.conf.js con
solo los files[] a testear
● Ejemplos de test en angularjs: link
JsDoc
● Utilizar jsDoc
para documentar
Otros
● Servicios $ de angular: Usar $document,
$window, $timeout y $interval en vez de los
propios de JavaScript
● Utilizar “live templates” en webstorm o sublime
Resumen
● Utilizar livetemplates para ver las estructuras de cada
objeto
● Modulo definido en la cabecera, con funciones
relacionadas (inject separado)
● Utilizar controllerAs: “vm” & var vm = this;
● Ordenar: definición variables, binding de funciones,
funciones.
● Servicios = datos // factories = funciones.
● Modificar DOM en directivas.
● No modificar ni datos ni DOM en los controladores.

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

ETIQUETAS JSP
ETIQUETAS JSPETIQUETAS JSP
ETIQUETAS JSP
 
Jsp
JspJsp
Jsp
 
PHP
PHPPHP
PHP
 
9.laravel
9.laravel9.laravel
9.laravel
 
Instalación de XAMPP en Linux
Instalación de XAMPP en LinuxInstalación de XAMPP en Linux
Instalación de XAMPP en Linux
 
Rendimiento en aplicaciones web con Symfony2
Rendimiento en aplicaciones web con Symfony2Rendimiento en aplicaciones web con Symfony2
Rendimiento en aplicaciones web con Symfony2
 
Etiquetas en JSP
Etiquetas en JSPEtiquetas en JSP
Etiquetas en JSP
 
Migrando data - DRUPAL
Migrando data - DRUPALMigrando data - DRUPAL
Migrando data - DRUPAL
 
componentes de jsp
componentes de jsp componentes de jsp
componentes de jsp
 
Novedades de PHP 7.*
Novedades de PHP 7.*Novedades de PHP 7.*
Novedades de PHP 7.*
 
JSP
JSP JSP
JSP
 
Etiquetas jsp
Etiquetas jspEtiquetas jsp
Etiquetas jsp
 
Curso Java Avanzado 3 4 Js Ps Con Java Beans
Curso Java Avanzado   3 4 Js Ps Con Java BeansCurso Java Avanzado   3 4 Js Ps Con Java Beans
Curso Java Avanzado 3 4 Js Ps Con Java Beans
 
Qué es jsp
Qué es jspQué es jsp
Qué es jsp
 
Elementos de JSP
Elementos de JSPElementos de JSP
Elementos de JSP
 
Objetos Implicitos de JSP
Objetos Implicitos de JSPObjetos Implicitos de JSP
Objetos Implicitos de JSP
 
Taller TestingUy 2019 - ¡Estresá el sistema, no al usuario!
Taller TestingUy 2019 - ¡Estresá el sistema, no al usuario!Taller TestingUy 2019 - ¡Estresá el sistema, no al usuario!
Taller TestingUy 2019 - ¡Estresá el sistema, no al usuario!
 
Servicios en Zend Framework 2
Servicios en  Zend Framework 2Servicios en  Zend Framework 2
Servicios en Zend Framework 2
 
Volley vs Retrofit
Volley vs RetrofitVolley vs Retrofit
Volley vs Retrofit
 
Curso de javascript desde cero
Curso de javascript desde ceroCurso de javascript desde cero
Curso de javascript desde cero
 

Destacado

Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015
Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015
Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015José Manuel García García
 
S initier aux_outils_collaboratifs_2013
S initier aux_outils_collaboratifs_2013S initier aux_outils_collaboratifs_2013
S initier aux_outils_collaboratifs_2013hjavaux
 
Convivències 4t eso
Convivències 4t esoConvivències 4t eso
Convivències 4t esoNatzaret
 
Necs pres general-(fr)
Necs pres general-(fr)Necs pres general-(fr)
Necs pres general-(fr)shahrokh123
 
Actividades de comentario de texto rev francesa
Actividades de comentario de texto rev francesaActividades de comentario de texto rev francesa
Actividades de comentario de texto rev francesaLuz García
 
Webinaire 2: La participation du patient et des visiteurs : le chaînon manqua...
Webinaire 2: La participation du patient et des visiteurs : le chaînon manqua...Webinaire 2: La participation du patient et des visiteurs : le chaînon manqua...
Webinaire 2: La participation du patient et des visiteurs : le chaînon manqua...Canadian Patient Safety Institute
 
Computerland c cloud-2013oct17
Computerland c cloud-2013oct17Computerland c cloud-2013oct17
Computerland c cloud-2013oct17Patricia NENZI
 
Tableauanalytiquecasclinique cedefomd
Tableauanalytiquecasclinique cedefomdTableauanalytiquecasclinique cedefomd
Tableauanalytiquecasclinique cedefomdMamedione Ba
 
Ning taller de comunicación
Ning taller de comunicaciónNing taller de comunicación
Ning taller de comunicaciónCristina Romero
 
Paisajes Vegetales
Paisajes VegetalesPaisajes Vegetales
Paisajes VegetalesLuz García
 

Destacado (20)

Directivas en AngularJS
Directivas en AngularJSDirectivas en AngularJS
Directivas en AngularJS
 
Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015
Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015
Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015
 
S initier aux_outils_collaboratifs_2013
S initier aux_outils_collaboratifs_2013S initier aux_outils_collaboratifs_2013
S initier aux_outils_collaboratifs_2013
 
Nuance ppt
Nuance pptNuance ppt
Nuance ppt
 
Convivències 4t eso
Convivències 4t esoConvivències 4t eso
Convivències 4t eso
 
Necs pres general-(fr)
Necs pres general-(fr)Necs pres general-(fr)
Necs pres general-(fr)
 
Actividades de comentario de texto rev francesa
Actividades de comentario de texto rev francesaActividades de comentario de texto rev francesa
Actividades de comentario de texto rev francesa
 
Calor electivo
Calor electivoCalor electivo
Calor electivo
 
Webinaire 2: La participation du patient et des visiteurs : le chaînon manqua...
Webinaire 2: La participation du patient et des visiteurs : le chaînon manqua...Webinaire 2: La participation du patient et des visiteurs : le chaînon manqua...
Webinaire 2: La participation du patient et des visiteurs : le chaînon manqua...
 
Marc chagall
Marc chagallMarc chagall
Marc chagall
 
Computerland c cloud-2013oct17
Computerland c cloud-2013oct17Computerland c cloud-2013oct17
Computerland c cloud-2013oct17
 
Joc simbòlic
Joc simbòlicJoc simbòlic
Joc simbòlic
 
6 11
6 116 11
6 11
 
Gand de duca
Gand de ducaGand de duca
Gand de duca
 
Trujillo ahora
Trujillo ahoraTrujillo ahora
Trujillo ahora
 
Theme 5
Theme 5Theme 5
Theme 5
 
Tableauanalytiquecasclinique cedefomd
Tableauanalytiquecasclinique cedefomdTableauanalytiquecasclinique cedefomd
Tableauanalytiquecasclinique cedefomd
 
Ning taller de comunicación
Ning taller de comunicaciónNing taller de comunicación
Ning taller de comunicación
 
Web 2.0
Web 2.0Web 2.0
Web 2.0
 
Paisajes Vegetales
Paisajes VegetalesPaisajes Vegetales
Paisajes Vegetales
 

Similar a AngularJS Clean Code Patterns

Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...
Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...
Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...Iván López Martín
 
Entonamiento y perfilado de Drupal
Entonamiento y perfilado de DrupalEntonamiento y perfilado de Drupal
Entonamiento y perfilado de Drupalcamposer
 
Practicas Recomendadas - WordPress Argentina Meetup Octubre 2014
Practicas Recomendadas - WordPress Argentina Meetup Octubre 2014Practicas Recomendadas - WordPress Argentina Meetup Octubre 2014
Practicas Recomendadas - WordPress Argentina Meetup Octubre 2014Laura Melo
 
Flex observers
Flex observersFlex observers
Flex observersazendal
 
Presentacion Ruby on Rails en Universidad Autónoma 2009
Presentacion Ruby on Rails en Universidad Autónoma 2009Presentacion Ruby on Rails en Universidad Autónoma 2009
Presentacion Ruby on Rails en Universidad Autónoma 2009Nelson Rojas Núñez
 
Dragome en JavaConf Buenos Aires 2014
Dragome en JavaConf Buenos Aires 2014 Dragome en JavaConf Buenos Aires 2014
Dragome en JavaConf Buenos Aires 2014 Fernando Petrola
 
Terraspace, the definitive terraform framework
Terraspace, the definitive terraform frameworkTerraspace, the definitive terraform framework
Terraspace, the definitive terraform frameworkMario IC
 
Web framework ligeros y micros en java barcamp 2014
Web framework ligeros y micros en java   barcamp 2014Web framework ligeros y micros en java   barcamp 2014
Web framework ligeros y micros en java barcamp 2014Carlos Camacho
 
¡This is drupal! - Global Training Days
¡This is drupal! - Global Training Days¡This is drupal! - Global Training Days
¡This is drupal! - Global Training DaysLa Drupalera
 
Mallorca MUG: MongoDB y .NET
Mallorca MUG: MongoDB y .NETMallorca MUG: MongoDB y .NET
Mallorca MUG: MongoDB y .NETEmilio Torrens
 
Grails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasGrails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasCarlos Camacho
 
Probando aplicaciones AngularJS
Probando aplicaciones AngularJSProbando aplicaciones AngularJS
Probando aplicaciones AngularJSRodrigo Pimentel
 
Introducción a JAVA
Introducción a JAVAIntroducción a JAVA
Introducción a JAVAjohitafresh
 
Introducción a NodeJS
Introducción a NodeJSIntroducción a NodeJS
Introducción a NodeJSBEEVA_es
 

Similar a AngularJS Clean Code Patterns (20)

Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...
Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...
Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...
 
Entonamiento y perfilado de Drupal
Entonamiento y perfilado de DrupalEntonamiento y perfilado de Drupal
Entonamiento y perfilado de Drupal
 
Semana 2 Configuración entorno de desarrollo
Semana 2   Configuración entorno de desarrolloSemana 2   Configuración entorno de desarrollo
Semana 2 Configuración entorno de desarrollo
 
Practicas Recomendadas - WordPress Argentina Meetup Octubre 2014
Practicas Recomendadas - WordPress Argentina Meetup Octubre 2014Practicas Recomendadas - WordPress Argentina Meetup Octubre 2014
Practicas Recomendadas - WordPress Argentina Meetup Octubre 2014
 
Flex observers
Flex observersFlex observers
Flex observers
 
Presentacion Ruby on Rails en Universidad Autónoma 2009
Presentacion Ruby on Rails en Universidad Autónoma 2009Presentacion Ruby on Rails en Universidad Autónoma 2009
Presentacion Ruby on Rails en Universidad Autónoma 2009
 
Dragome en JavaConf Buenos Aires 2014
Dragome en JavaConf Buenos Aires 2014 Dragome en JavaConf Buenos Aires 2014
Dragome en JavaConf Buenos Aires 2014
 
Terraspace, the definitive terraform framework
Terraspace, the definitive terraform frameworkTerraspace, the definitive terraform framework
Terraspace, the definitive terraform framework
 
Web framework ligeros y micros en java barcamp 2014
Web framework ligeros y micros en java   barcamp 2014Web framework ligeros y micros en java   barcamp 2014
Web framework ligeros y micros en java barcamp 2014
 
¡This is drupal! - Global Training Days
¡This is drupal! - Global Training Days¡This is drupal! - Global Training Days
¡This is drupal! - Global Training Days
 
Resilient Distributed Dataset - Analisis paper
Resilient  Distributed Dataset - Analisis paper Resilient  Distributed Dataset - Analisis paper
Resilient Distributed Dataset - Analisis paper
 
Spark
SparkSpark
Spark
 
Grails barcamp 2013
Grails barcamp 2013Grails barcamp 2013
Grails barcamp 2013
 
Asp
AspAsp
Asp
 
Mallorca MUG: MongoDB y .NET
Mallorca MUG: MongoDB y .NETMallorca MUG: MongoDB y .NET
Mallorca MUG: MongoDB y .NET
 
Grails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasGrails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - Sistemas
 
Probando aplicaciones AngularJS
Probando aplicaciones AngularJSProbando aplicaciones AngularJS
Probando aplicaciones AngularJS
 
Jsp
JspJsp
Jsp
 
Introducción a JAVA
Introducción a JAVAIntroducción a JAVA
Introducción a JAVA
 
Introducción a NodeJS
Introducción a NodeJSIntroducción a NodeJS
Introducción a NodeJS
 

AngularJS Clean Code Patterns

  • 2. Principio LIFT ● L: Locating: localizar nuestro código ● I: Identify: Identificar el código de un vistazo ● F: Estructura plana, max 7 niveles directorios ● T: Don't repeat yourself
  • 3. Pautas de nombre ● Nombres que se entiendan, no utilizar abreviaciones complicadas. ● Archivo: feature.type.js ex: personas.service.js ● Interno: FeatureType ex: PersonasController ● Camel-casting para servicios o factorías ● Directivas: usar un prefijo propio, como: masp- ● Primera minúscula en nombres de archivos o funciones, pero mayúscula en el nombre de controlador, servicio, factoría...
  • 4. Organización ficheros ● directives/ – masp_input_translated/ ● masp_input_translated.js ● masp_input_translated.jade ● masp_input_translated.spec.js ● services/ – service.js ● modules/ – sections/ ● directives/ ● sections.js ● sections.spec.js ● sectionsService.js ● sections.jade ● sections_form.jade ● additionalConcept.js ● additionalConcept.espec.js ● ... Common Modul
  • 6. Módulos: Definición Declara los módulos sin usar una variable, usando la sintaxis de los setters y getters. Setea sólo una vez y usa get para el resto de instancias
  • 7. Funciones: siempre con nombre Evitar las funciones anónimas en los callbacks
  • 8. Controladores ● Usar siempre controllerAs en lugar del clásico controlador con $scope ● La sintaxis controllerAs usa this dentro de los controladores que se asocian al $scope ● Considerar usar el $scope en una factory, evitar su uso en el controlador ● No usar para interaccionar con el DOM o para manipular datos.
  • 9. Controladores: Bindeables Arriba The Revealing Module Pattern
  • 10. Controladores: Diferir la Lógica ● Difiera la lógica dentro de un controlador delegándola a servicios y fábricas.
  • 12. Directivas ● 1 directiva por archivo ● Manipulación del DOM dentro de las directivas, aunque si es posible mejor manipularlo por CSS ● Utilizar un prefijo corto, propio, ej: masp- ● Evitar el uso de directivas por “clase” ● Usa bindToController = true cuando uses controller as con una directiva cuando quieras asociar el scope exterior al scope del controller de la directiva.
  • 13. Resolver dependencias ● Utilitzar el “reload()” dentro de un controlador ● Si hay “query's” impresindibles, cargarlos en el routeProvider en el “resolve”
  • 14. Manejo de Excepciones ● Decoratores: Realizar acciones personalizadas cuando una excepción ocurra. ● Cachadores de excepciones ● Errores de ruta: Mejora la experiencia de usuario si hay un error de enrutamiento y lo redirigimos a una pantalla amigable.
  • 15. Testing ● Naming: archivos finalizados con: .spec.js ● Usaremos Mocha & Chai ● Usaremos Karma como test runner: solo tendremos que incluir los ficheros que queremos testear ● Usar SinionJS para “stubbing and Spying” = simular AJAX, servers, timers... ● Usar PhantomJS como Headless Browser Masterpkg test or masterpkg test-dev & karma.conf.js con solo los files[] a testear ● Ejemplos de test en angularjs: link
  • 17. Otros ● Servicios $ de angular: Usar $document, $window, $timeout y $interval en vez de los propios de JavaScript ● Utilizar “live templates” en webstorm o sublime
  • 18. Resumen ● Utilizar livetemplates para ver las estructuras de cada objeto ● Modulo definido en la cabecera, con funciones relacionadas (inject separado) ● Utilizar controllerAs: “vm” & var vm = this; ● Ordenar: definición variables, binding de funciones, funciones. ● Servicios = datos // factories = funciones. ● Modificar DOM en directivas. ● No modificar ni datos ni DOM en los controladores.