Buenas prácticas para proyectos con AngularJs

A continuación voy a listar una serie de buenas prácticas que me han resultado en los proyectos en los que trabajo en Abakio.

1. Convención para nombrar tus archivos

Define una forma y siguela con la misma obsesión que Messi sigue a la pelota.
Si tienes una carpeta product-list, dentro de esa carpeta deberás tener tus archivos siguiendo ese mismo formato, buenos ejemplos son: product-list-controller.js o product-list-service.js, un mal ejemplo es productListController.js.

2. Sufijos para tus archivos

Aunque esto depende mucho de tu forma de trabajo en proyectos muy largos puede ser beneficioso agregar sufijos para los tipos de archivos con los que trabajas, por ejemplo: product-list.ctrl.js, product-list-svc.js, etc.
De ésta forma los archivos son más fáciles de leer (una vez tu team tenga claro que significa cada sufijo), búsqueda sencilla dentro de tu editor de código y también para cualquier tool tipo grunt, gulp, webpack, etc.

3. Un archivo una responsabilidad

Si tienes un archivo product-list.ctrl.js ese archivo debe tener solo el controller que represente la funcionalidad de listar productos, nada más. Los beneficios acá son fáciles de detectar, es fácil de localizar y modificar ya que sabemos exactamente dónde se encuentra cada funcionalidad, además mantiene nuestros archivos con la menor cantidad de código posible.

4. Organiza tus archivos por funcionalidad

En lugar de tener una carpeta controllers y agregar dentro de ésta todos tus controllers, crea carpetas según las funcionalidades de tu aplicación. ¿Tienes un módulo que lista productos? Crea una carpeta product-list y dentro de ella los controllers, services, directives y todo lo que abarque tu módulo. Ojo que no solo archivos javascript, también html o css.

Good folder structure Bad folder structure

5. Separa tu aplicación por módulos

Si tienes un módulo inicial llamado superProducts que define toda tu aplicación, cada funcionalidad creala como un módulo independiente superProducts.product-list y que sea dependencia de tu aplicación principal.

Organization per modules

6. Tus directivas deben ser reutilizables

No crees directivas porque sí, una buena pregunta antes de empezar a crear una es ¿Puedo utilizarla en otra aplicación? Si la respuesta es sí, genial, creala, pero siempre teniendo en cuenta no romper ésta regla, una directiva debe funcionar independientemente de la aplicación que la consume.

7. Pierde el miedo a NodeJs y automatiza todo

Nodejs tiene muchos módulos que nos hacen la vida más fácil y rápida. En lugar de descargar manualmente las librerías con las que normalmente trabajas, usa bower o npm, reduce tu trabajo a un simple:

npm install angular  
bower install angular  

Lo mismo aplica para cualquier otra tarea que normalmente siempre se repite en un proyecto, minificar/concatenar tu código, usa herramientas como grunt, gulp, webpack, el que más te guste, realmente no importa cual de ellos termines utilizando.