TypeScript - Estructura de Proyecto Angular 2 con Múltiples Módulos
Actualmente estoy desarrollando mi primera aplicación Angular 2+ y me estoy encontrando con un par de problemas sobre la mejor manera de estructurar la aplicación.
Acabo de comenzar a desarrollar la área de la aplicación donde un usuario puede hacer cosas como iniciar sesión y crear una cuenta. Para solo estas dos rutas, ya tengo varios componentes (formulario de inicio de sesión, formulario de registro, página de inicio de sesión, página de registro, etc.). Seguir declarando estos en el módulo raíz parece desordenado, especialmente a medida que la aplicación crece en tamaño.
¿Cómo debería proceder de ahora en adelante? ¿Hacer un módulo para cada ruta? ¿Hacer un módulo que abarque tanto la funcionalidad de inicio de sesión como la de registro, ya que son similares? No estoy encontrando mucha información en línea, ¡así que cualquier orientación sería genial!
¡Gracias!
Respuesta #1
La guía de estilo oficial que ya fue sugerida por @brijmcq y la documentación sobre módulos dan una buena primera orientación.
Deberías agrupar las clases de tu aplicación en módulos por característica (y definitivamente no por tipo). Depende mucho del contexto dónde trazar la línea. Para una aplicación muy pequeña, un módulo raíz de la aplicación podría ser suficiente; en la mayoría de los casos, tener módulos por característica tiene mucho sentido. Típicamente, un módulo maneja más de una ruta; sin embargo, podría haber casos donde una ruta por módulo sea apropiada. En tu caso, un módulo de autenticación que maneje inicio de sesión, cierre de sesión, registro,... me parece muy razonable. Si tu proceso de registro se vuelve muy complejo, podrías considerar refactorizarlo en su propio módulo más adelante.
Algunas cosas podrían no pertenecer a una característica en particular pero se usan en varias características diferentes (principalmente componentes de interfaz de usuario, como un botón de acción flotante). Es práctica común mover esas cosas a tu propio módulo común e importar este en todos tus módulos.