Llevo en el mundo del desarrollo web varios años ya, y mi fuerte es PHP. Cuando escribo código en PHP me resulta muy fácil organizarlo. Suelo crear bastantes clases, cada una con una única responsabilidad, y todas las clases se agrupan a su vez en sus respectivos namespaces. Creo interfaces cuando son necesarias, uso TypeHint en los argumentos cuando es conveniente, creo tests siguiendo la metodología TDD y, en general, intento siempre escribir un código que resulte fácil de leer para otros programadores.
Sin embargo, cuando intento hacer lo mismo en JavaScript, me resulta imposible. No digo que sea imposible, ya que JavaScript es un lenguaje con el que tengo poca experiencia, pero a día de hoy no he encontrado la forma de hacer que el poco JavaScript que escribo esté tan bien organizado como su contrapartida en PHP. A lo máximo a lo que llego es a crear varios archivos .js en los que conviven muchas funciones que tienen cierta relación entre sí, pero suelen acabar siendo archivos bastante grandes y desordenados. Además, leer JavaScript escrito por otra gente tampoco me ayuda, ya que he tenido bastantes compañeros de trabajo que escribían en JS a diario, y todos ellos sin excepción escriben del mismo modo: desorganizado, sin ningún tipo de tests, con archivos .js de varios cientos y hasta miles de líneas, en los que se mezcla de todo: clases que no tienen demasiada relación entre sí, otras funciones que mezclan la capa de presentación y la de negocio, etc.
Por supuesto, a lo largo de estos años también he visto muchísimo código PHP que es basura, código espagueti. Sin embargo en los últimos años el ecosistema de PHP ha dado un giro a mejor, y hoy por hoy es fácil escribir un código legible y bien organizado en PHP. Por ello, me gustaría preguntar a los expertos en JavaScript del foro: ¿cómo hacéis vosotros para organizar bien vuestro código en JavaScript? Me refiero a JavaScript pelado y mondado, sin utilizar frameworks. En el trabajo hace unos meses utilicé AngularJS y ciertamente ayuda en la organización del código, y estoy seguro de que otros frameworks también desempeñan una buena labor en este aspecto. También usamos Jasmine para testear nuestro código.
Sin embargo, ¿cómo se organiza el código sin usar frameworks? ¿Existen los namespaces en JavaScript (o un concepto similar)? ¿Existe alguna forma de crear archivos .js pequeños los cuales solamente contengan una única clase con una única responsabilidad, distribuyéndolos a su vez en directorios que formen el espacio de nombres, tal y como se hace en otros lenguajes como Java o PHP? Y en caso de ser así, ¿cómo se referencian los unos a los otros? ¿Y cómo se incluirían tantísimos archivos en una página web? ¿Habría que usar algún tipo de procesador que los combinase en un único archivo .js?
Como veis, tengo muchísimas dudas debido a mi inexperiencia en JavaScript, así que cualquier consejo, recomendación de libro o página web, será bienvenido.
¡Salu2!