====== 7. Arquitectura ======
Vamos finalmente a unificar todo y crear la arquitectura definitiva que vamos a usar en clase.
Para crear una buena arquitectura vamos a hacer lo siguiente:
* [[#Indicar a Angular que el proyecto es en Español]]
* [[#Añadir Angular Material]]
* [[#Crear el CSS común a todo el proyecto]]
* [[#Crear los Componentes reusables de Angular]]
* [[#Crear las páginas del proyecto.]]
===== Indicar a Angular que el proyecto es en Español =====
Véase: [[clase:daw:diw:1eval:tema02#establecer_el_idioma_y_moneda]]
===== Usar Angular Material =====
Véase: [[clase:daw:diw:1eval:tema02#anadir_angular_material]]
src/app/scss
/01_utilities
/02_base
/03_global
/04_components
main.scss
src/app/components/ui
/c-button
/c-panel
src/app/components/paginas
/main
/productos
/login
===== Crear el CSS común a todo el proyecto =====
Se tiene que crear la carpeta ''src/app/scss'' donde irá todo nuestro SASS. El fichero que contendrá todo el SASS es ''src/app/scss/main.scss''
En el fichero ''styles.scss'' añadir la linea siguiente para que Angular sepa donde está nuestro SASS:
@use './app/scss/main.scss' as *;
Dentro de la carpeta ''src/app/scss'' , habrá la siguiente estructura de ficheros:
src/app/scss
/01_utilities
_variables.scss
_functions.scss
_mixins.scss
_index.scss
/02_base
_reset.scss
_typography.scss
_index.scss
/03_global
_cada_una_de_los_modificadores_globales.scss
_index.scss
/04_components
_cada_uno_de_los_componentes.scss
_index.scss
main.scss
La explicación de cada carpeta es la siguiente:
* /01_utilities
* _variables.scss: Variables de **SASS** como por ejemplo los colores o tamaños de margen ,etc
* _functions.scss: Funciones de SASS
* _mixins.scss: Mixins de SASS
* _index.scss: Los //imports// de cada fichero de esta carpeta.
@forward "./_variables.scss";
@forward "./_functions.scss";
@forward "./_mixins.scss";
* /02_base
* _reset.scss: El reset que usemos
* _typography.scss: Para importar tipos de letra
* _index.scss: Los //imports// de cada fichero de esta carpeta.
@forward "./_reset.scss";
@forward "./_typography.scss";
* /03_global
* _cada_una_de_los_modificadores globales.scss: Habrá un fichero por cada tipo de modificador que haya. Por ejemplo ''_g--margin.scss'', ''_g--padding.scss'', ''_font-size.scss'' o ''_color.scss''. Más información en [[clase:daw:diw:1eval:tema03.c]] , [[[clase:daw:diw:1eval:tema04]], [[clase:daw:diw:1eval:tema05]]
* _index.scss: Los //imports// de cada fichero de esta carpeta.
@forward "./color";
@forward "./font-size";
@forward "./margin";
@forward "./padding";
* /04_components
* _cada_uno_de_los_componentes.scss: Habrá un fichero por cada Bloque que sea de tipo Componente pero que **NO sean de Angular**. Por ejemplo ''_c-button.scss'', ''_l-flex.scss'' , ''_l-columns.scss'' o ''_c-panel.scss''. Más información en [[clase:daw:diw:1eval:tema03.c]] , [[[clase:daw:diw:1eval:tema04]], [[clase:daw:diw:1eval:tema05]], [[clase:daw:diw:1eval:tema06]]
* _index.scss: Los //imports// de cada fichero de esta carpeta.
@forward "./_c-button.scss";
@forward "./_c-panel.scss";
@forward "./_l-columns.scss";
@forward "./_l-flex.scss";
* main.scss: Aquí se agrupa todo el código de SASS y es el único fichero que se transforma en CSS.
@forward "./02_base";
@forward "./03_components";
@forward "./04_global";
Dentro de cada fichero ''.scss'' que use algo de las utilidaes (como variables, SASS, funciones o utilidades) se añadirá la referencia a las utilidades con la siguiente linea:
@use "../01_utilidades/index" as utilidades;
Al crear el CSS/SASS es importante seguir las directrices de:
* BEM: [[clase:daw:diw:1eval:tema03.c]]
* Variables: [[clase:daw:diw:1eval:tema04#variables_css]]
===== Crear los Componentes reusables de Angular =====
Ahora hay que crear la carpeta donde estarán nuestros componentes de Angular. Para ello crearemos la carpeta ''src/app/components/ui''.
En esta carpeta deben estar todos los componentes **reusables** por toda la aplicación.
src/app/components/ui
/c-button
c-button.ts
c-button.html
c-button.scss
/c-panel
c-panel.ts
c-panel.html
c-panel.scss
/l-flex
l-flex.ts
l-flex.html
l-flex.scss
Para crear el SCSS se seguirán las mismas normas que al crear el SCSS común a todo el proyecto.
Más información en:
* [[clase:daw:diw:1eval:tema03]]
* [[clase:daw:diw:1eval:tema03.b]]
* [[clase:daw:diw:1eval:tema03.c]]
* [[[clase:daw:diw:1eval:tema04]]
* [[clase:daw:diw:1eval:tema05]]
* [[clase:daw:diw:1eval:tema06]]
Notar la diferencia por ejemplo entre el fichero ''src/app/scss/03_components/l-flex'' y la carpeta ''src/app/components/ui/l-flex''
* ''src/app/scss/03_components/l-flex'': Estamos creando clases CSS para flex
* ''src/app/components/ui/l-flex'': Estamos creando componentes o atributos Angular para flex
Lo normal es que esté uno o el otro. Lo mismo se podría aplicar a cualquier otro layout o componentes como ''c-button''.
===== Crear las páginas del proyecto. =====
Finalmente en la carpeta ''src/app/components/paginas'', añadiremos todos los componentes específicos de la aplicación. Aquí es donde se hace uso de los distintos elementos reusables que creamos en ''src/app/components/ui''
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
===== CSS linters =====
Angular incluye de serie una herramienta de procesamiento CSS llamada [[https://postcss.org/|PostCSS]]. Esta herramienta lee el CSS y permite analizarlo o hacer modificaciones.
PostCSS está basado en plugins que permiten extender PostCSS con nuevos análisis o modificaciones.A las herramientas que analizan el código para ver si tiene "problemas" se le llaman //linters//.
Nosotros vamos a usar PostCSS para analizar nuestro CSS y ver si cumple las normas de SUIT CSS. El plugin o linter que vamos a usar es [[https://github.com/postcss/postcss-bem-linter|postcss-bem-linter]].
Los pasos para instalarlo son
* Descargar el linter
npm install --save-dev postcss-bem-linter
* Crear/modificar el fichero ''.postcssrc.json''. Debe estar en el raíz del proyecto.
{
"plugins": {
"postcss-bem-linter": {
"preset": "bem"
}
}
}
===== UIFactory =====
Para evitar el warning:
▲ [WARNING] NG8113: Boton is not used within the template of App [plugin angular-compiler]
Hay que añadir lo siguiente en el fichero ''tsconfig.json''
{
"angularCompilerOptions": {
"extendedDiagnostics": {
"checks": {
"unusedStandaloneImports": "suppress"
}
}
}
}
Más informnación:
* [[https://angular.dev/extended-diagnostics/NG8113#what-if-i-cant-avoid-this|NG8113: Unused Standalone Imports. What if I can't avoid this?]]