You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/develop/paginated/angular17.md
+24Lines changed: 24 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -72,6 +72,17 @@ Por defecto, el esquema de datos de Spring para la paginación es como el siguie
72
72
73
73
Así que necesitamos poder enviar y recuperar esa información desde Angular, nos hace falta crear esos objetos. Los objetos de paginación, al ser comunes a toda la aplicación, vamos a crearlos en `core/model/page`.
74
74
75
+
!!! info "¿Por qué en `core/model/page` y no dentro del componente `author`?"
76
+
`SortPage`, `Pageable` y `PaginatedData`**no pertenecen al dominio de negocio de `Author`**; son contratos técnicos que describen cómo se comunica el frontend con el backend cuando los datos vienen paginados.
77
+
78
+
Cualquier otro listado de la aplicación —categorías, préstamos, juegos…— necesitará exactamente estos mismos objetos. Si los metiéramos dentro de `author/`, el día que quisiéramos paginar otro listado tendríamos dos opciones igual de malas: duplicar el código o importar clases de un módulo que no tiene nada que ver con tu entidad.
79
+
80
+
Colocarlos en `core/` sigue el principio de **reutilización y responsabilidad única**:
81
+
82
+
- Un único lugar donde mantener el contrato de paginación.
83
+
- Si el backend cambia el esquema (p. ej. renombra `pageNumber` a `page`), sólo hay que tocar un fichero.
84
+
- Cualquier desarrollador que llegue al proyecto sabrá dónde buscarlos sin tener que adivinar en qué módulo de negocio están escondidos.
85
+
75
86
=== "SortPage.ts"
76
87
``` TypeScript
77
88
export class SortPage {
@@ -100,6 +111,19 @@ Así que necesitamos poder enviar y recuperar esa información desde Angular, no
100
111
}
101
112
```
102
113
114
+
!!! info "¿Qué es `<TData>`?"
115
+
`<TData>` es un **genérico de TypeScript** (el equivalente a los *generics* de Java `<T>` o de C# `<T>`).
116
+
117
+
Permite que `PaginatedData` sea una clase **reutilizable con cualquier tipo de contenido**, sin necesidad de crear una clase distinta para cada entidad:
TypeScript verifica el tipo en tiempo de compilación, por lo que si intentas acceder a una propiedad que no existe en `Author` dentro de un `PaginatedData<Author>`, el compilador te avisará de inmediato. Obtienes reutilización **y** seguridad de tipos al mismo tiempo.
126
+
103
127
Con estos objetos creados ya podemos implementar el servicio y sus datos mockeados.
<p>Así que necesitamos poder enviar y recuperar esa información desde Angular, nos hace falta crear esos objetos. Los objetos de paginación, al ser comunes a toda la aplicación, vamos a crearlos en <code>core/model/page</code>.</p>
2304
+
<divclass="admonition info">
2305
+
<pclass="admonition-title">¿Por qué en <code>core/model/page</code> y no dentro del componente <code>author</code>?</p>
2306
+
<p><code>SortPage</code>, <code>Pageable</code> y <code>PaginatedData</code><strong>no pertenecen al dominio de negocio de <code>Author</code></strong>; son contratos técnicos que describen cómo se comunica el frontend con el backend cuando los datos vienen paginados.</p>
2307
+
<p>Cualquier otro listado de la aplicación —categorías, préstamos, juegos…— necesitará exactamente estos mismos objetos. Si los metiéramos dentro de <code>author/</code>, el día que quisiéramos paginar otro listado tendríamos dos opciones igual de malas: duplicar el código o importar clases de un módulo que no tiene nada que ver con tu entidad.</p>
2308
+
<p>Colocarlos en <code>core/</code> sigue el principio de <strong>reutilización y responsabilidad única</strong>:</p>
2309
+
<ul>
2310
+
<li>Un único lugar donde mantener el contrato de paginación.</li>
2311
+
<li>Si el backend cambia el esquema (p. ej. renombra <code>pageNumber</code> a <code>page</code>), sólo hay que tocar un fichero.</li>
2312
+
<li>Cualquier desarrollador que llegue al proyecto sabrá dónde buscarlos sin tener que adivinar en qué módulo de negocio están escondidos.</li>
<pclass="admonition-title">¿Qué es <code><TData></code>?</p>
2348
+
<p><code><TData></code> es un <strong>genérico de TypeScript</strong> (el equivalente a los <em>generics</em> de Java <code><T></code> o de C# <code><T></code>).</p>
2349
+
<p>Permite que <code>PaginatedData</code> sea una clase <strong>reutilizable con cualquier tipo de contenido</strong>, sin necesidad de crear una clase distinta para cada entidad:</p>
<p>TypeScript verifica el tipo en tiempo de compilación, por lo que si intentas acceder a una propiedad que no existe en <code>Author</code> dentro de un <code>PaginatedData<Author></code>, el compilador te avisará de inmediato. Obtienes reutilización <strong>y</strong> seguridad de tipos al mismo tiempo.</p>
2355
+
</div>
2335
2356
<p>Con estos objetos creados ya podemos implementar el servicio y sus datos mockeados.</p>
0 commit comments