SlideShare una empresa de Scribd logo
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

PDF
Java web 01 - servlets
PDF
JAVA SERVER FACES - LECCION 01 - PRIMEROS PASOS
PDF
Java Web 00 - Contexto
PDF
PDF
Java Web Lección 03 - MVC
PDF
Java web Lección 04 - JSTL
ODP
JSP Objetos
PDF
Java Web Lección 02 - JSP
Java web 01 - servlets
JAVA SERVER FACES - LECCION 01 - PRIMEROS PASOS
Java Web 00 - Contexto
Java Web Lección 03 - MVC
Java web Lección 04 - JSTL
JSP Objetos
Java Web Lección 02 - JSP

La actualidad más candente (20)

ODP
ETIQUETAS JSP
PPTX
PPT
PDF
Instalación de XAMPP en Linux
PPTX
Rendimiento en aplicaciones web con Symfony2
ODP
Etiquetas en JSP
PDF
Migrando data - DRUPAL
ODP
componentes de jsp
PDF
Novedades de PHP 7.*
ODP
Etiquetas jsp
PPT
Curso Java Avanzado 3 4 Js Ps Con Java Beans
PPTX
Qué es jsp
PPTX
Elementos de JSP
ODP
Objetos Implicitos de JSP
PDF
Taller TestingUy 2019 - ¡Estresá el sistema, no al usuario!
PPT
Servicios en Zend Framework 2
PDF
Volley vs Retrofit
DOCX
Curso de javascript desde cero
ETIQUETAS JSP
Instalación de XAMPP en Linux
Rendimiento en aplicaciones web con Symfony2
Etiquetas en JSP
Migrando data - DRUPAL
componentes de jsp
Novedades de PHP 7.*
Etiquetas jsp
Curso Java Avanzado 3 4 Js Ps Con Java Beans
Qué es jsp
Elementos de JSP
Objetos Implicitos de JSP
Taller TestingUy 2019 - ¡Estresá el sistema, no al usuario!
Servicios en Zend Framework 2
Volley vs Retrofit
Curso de javascript desde cero
Publicidad

Destacado (20)

PDF
Directivas en AngularJS
PDF
Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015
PDF
S initier aux_outils_collaboratifs_2013
PPTX
Nuance ppt
PPT
Convivències 4t eso
PDF
Necs pres general-(fr)
ODP
Actividades de comentario de texto rev francesa
DOC
Calor electivo
PDF
Webinaire 2: La participation du patient et des visiteurs : le chaînon manqua...
PPTX
Marc chagall
PPTX
Computerland c cloud-2013oct17
PPT
Joc simbòlic
PDF
PPS
Gand de duca
PPT
Trujillo ahora
PPTX
Theme 5
DOC
Tableauanalytiquecasclinique cedefomd
PPT
Ning taller de comunicación
PPTX
Web 2.0
PPT
Paisajes Vegetales
Directivas en AngularJS
Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015
S initier aux_outils_collaboratifs_2013
Nuance ppt
Convivències 4t eso
Necs pres general-(fr)
Actividades de comentario de texto rev francesa
Calor electivo
Webinaire 2: La participation du patient et des visiteurs : le chaînon manqua...
Marc chagall
Computerland c cloud-2013oct17
Joc simbòlic
Gand de duca
Trujillo ahora
Theme 5
Tableauanalytiquecasclinique cedefomd
Ning taller de comunicación
Web 2.0
Paisajes Vegetales
Publicidad

Similar a AngularJS Patterns: Clean Code (20)

PDF
Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...
PDF
Entonamiento y perfilado de Drupal
PDF
Semana 2 Configuración entorno de desarrollo
PPTX
Practicas Recomendadas - WordPress Argentina Meetup Octubre 2014
ODP
Flex observers
ODP
Presentacion Ruby on Rails en Universidad Autónoma 2009
PPTX
Dragome en JavaConf Buenos Aires 2014
PDF
Terraspace, the definitive terraform framework
ODP
Web framework ligeros y micros en java barcamp 2014
PPT
java presentación.ppt presetnación conceptos java
PDF
¡This is drupal! - Global Training Days
PPT
PROGRAMACIÓN CON JAVA MAVEN PROGRAMACIÓN CON JAVA MAVEN.ppt
PPTX
Resilient Distributed Dataset - Analisis paper
PPTX
ODP
Grails barcamp 2013
PPT
PPTX
Mallorca MUG: MongoDB y .NET
ODP
Grails 2013 - PUCMM - Santiago - Sistemas
PDF
Probando aplicaciones AngularJS
PPTX
Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...
Entonamiento y perfilado de Drupal
Semana 2 Configuración entorno de desarrollo
Practicas Recomendadas - WordPress Argentina Meetup Octubre 2014
Flex observers
Presentacion Ruby on Rails en Universidad Autónoma 2009
Dragome en JavaConf Buenos Aires 2014
Terraspace, the definitive terraform framework
Web framework ligeros y micros en java barcamp 2014
java presentación.ppt presetnación conceptos java
¡This is drupal! - Global Training Days
PROGRAMACIÓN CON JAVA MAVEN PROGRAMACIÓN CON JAVA MAVEN.ppt
Resilient Distributed Dataset - Analisis paper
Grails barcamp 2013
Mallorca MUG: MongoDB y .NET
Grails 2013 - PUCMM - Santiago - Sistemas
Probando aplicaciones AngularJS

Último (11)

PPTX
ORIGEN DE LA IA - GRADO 1102 INTELIGENCIA
PPTX
Tratará sobre Grafos_y_Arboles_Presentacion.pptx
PDF
Clase 3 - Presentación visual (Insertando objetos visuales) POWER POINT.pdf
PPTX
Implementación equipo monitor12.08.25.pptx
PDF
Su punto de partida en la IA: Microsoft 365 Copilot Chat
PPTX
Fundamentos de Python - Curso de Python dia 1
DOCX
trabajo programacion.docxxdxxxddxdxxdxdxxxdxxdxdxd
PDF
AutoCAD Herramientas para el futuro, Juan Fandiño
PPTX
Derechos_de_Autor_y_Creative_Commons.pptx
PPTX
Conceptos basicos de Base de Datos y sus propiedades
PPTX
sistemas de informacion.................
ORIGEN DE LA IA - GRADO 1102 INTELIGENCIA
Tratará sobre Grafos_y_Arboles_Presentacion.pptx
Clase 3 - Presentación visual (Insertando objetos visuales) POWER POINT.pdf
Implementación equipo monitor12.08.25.pptx
Su punto de partida en la IA: Microsoft 365 Copilot Chat
Fundamentos de Python - Curso de Python dia 1
trabajo programacion.docxxdxxxddxdxxdxdxxxdxxdxdxd
AutoCAD Herramientas para el futuro, Juan Fandiño
Derechos_de_Autor_y_Creative_Commons.pptx
Conceptos basicos de Base de Datos y sus propiedades
sistemas de informacion.................

AngularJS Patterns: Clean Code

  • 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.