Javascript: Enfoque orientado a librerías vs frameworks
Cuando hablamos de librerías, nos referimos a una utilidad o conjunto de utilidades que proveen soluciones para solventar problemas concretos.
Por ejemplo, Moment.js es una librería que nos provee utilidades para operar con fechas y tiempos.
Cuando hablamos de frameworks, nos referimos a un ecosistema que engloba librerías, utilidades y su propia “manera de hacer las cosas”. Mayormente, utilizan los estándares que hay y les dan “una vuelta de tuerca” para agilizar el desarrollo y permitir a los desarrolladores llegar antes a sus objetivos.
Enfoque orientado a liberías
A la hora de crear un nuevo proyecto, podemos utilizar un enfoque orientado a librerías. Esto significa que nosotros tendremos el control sobre nuestro proyecto y utilizaremos librerías que resuelvan problemas concretos y programaremos utilizando la sintaxis propia del lenguaje que hemos elegido, en este caso Javascript.
Cuando utilizamos un enfoque orientado a librerías y queremos crear un proyecto Front End generalmente como primera opción pensaríamos en React, que es una librería desarrollada por Facebook que se encarga de renderizar las vistas de nuestra aplicación.
A partir de aquí, utilizaríamos otras librerías a nuestro gusto y necesidades para complementarla para realizar peticiones http, manejar el estado de la aplicación, utilizar animaciones, etc.
Es importante ser conscientes que de esta manera el programador es el que controla que quiere usar, cuando quiere usarlo y como quiere usarlo en función de las necesidades del proyecto.
La esencia de este enfoque es utilizar pequeñas librerías que resuelvan problemas concretos y orientar tu proyecto a módulos independientes que permitan escalar tu aplicación.
Al utilizar varias librerías y llevar el control, muchas veces te adentras a entender cosas y funcionamientos internos, lo que amplia tu conocimiento y tu capacidad de entender mejor lo que estas utilizando.
Utilizando un framework
Por otro lado, a la hora de crear un proyecto podemos utilizar un framework. Si pensamos en crear un proyecto Front End en 2017 utilizando un framework, probablemente Angular 2 sería nuestra primera elección.
Al usar un framework deberemos de realizar nuestro proyecto utilizando las utilidades que provee ya que, en muchos casos, añadir librerías externas puede ser un dolor de cabeza. En este caso, Angular provee utilidades para realizar peticiones http, animaciones, formularios, etc.
Lo bueno de usar un framework es que ya tienes muchas cosas hechas de las que no debes de preocuparte. Si no dispones de mucho tiempo y quieres desarrollar aplicaciones rápidamente y especializarte en algo, usar un framework puede ser una buena elección.
Usar un framework no te impide utilizar librerías, es mas, puedes utilizar React dentro de Angular como librería para renderizar las vistas.
Muchas veces usando un framework utilizarás librerías externas pero si no están adaptadas a tu framework, deberas de integrarlas tu y para ello debes de conocer muy bien las utilidades de tu framework por un lado, y por otro lidiar con las posibles incompatibilidades que tenga la librería en cuestión, que pueden ser muchas o puede ser ninguna.
¿Utilizo librerías o utilizo un framework?
Depende de muchas variables como por ejemplo el tiempo que se dispone, la capacidad de asimilar conceptos y abstraerse y ganas de aprendizaje.
Si nos basamos en hechos recientes, usar un Framework te puede jugar una mala pasada como ocurrió al actualizarse Angular a Angular 2, ya que no era una actualización sino un completo rediseño del framework que te obligaba a aprender algo totalmente nuevo.
Si utilizas un enfoque orientado a librerías tendrás que dedicar mas tiempo al aprendizaje y a buscarte a vida para resolver determinadas situaciones. Lo bueno es que si tienes vocación, estas situaciones te harán un mejor desarrollador Javascript al no estar ligado a las forma de hacer las cosas de un framework.
Conclusión
Decidas utilizar un framework como Angular o un enfoque orientado a librerías con React, es importante que diseñes tu proyecto de forma que sea escalable, orientándolo a módulos, utilizando servicios internos en cada modulo y manejando el estado de tu aplicación aislándolo de los componentes.