Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

304
Vistas
Servicio Angular 2: dónde guardar los datos

He estado aprendiendo angular 2 durante un par de semanas. Estoy un poco confundido con una cosa. Compare cómo se almacenan/comparten los datos aquí:

https://github.com/Apress/pro-angular-2ed/blob/master/Angular%202.0/08%20-%20SportsStore%20-%20Orders%20and%20Checkout/SportsStore/app/model/product.repository. t

y aquí:

https://github.com/gothinkster/angular2-realworld-example-app/blob/master/src/app/shared/services/comments.service.ts

El primer enlace muestra cómo se hace en el libro de Adam Freeman llamado "Pro Angular". Podemos ver que hay un servicio llamado ProductRepository, y ahí es donde se almacenan todos los productos. Este servicio tiene un constructor que inicializa sus datos desde otro servicio, llamado StaticDataSource (más adelante en el libro se cambia para tomar los datos del resto de la API). Entonces, para resumir: tenemos un componente, que se inyecta en un servicio llamado ProductRepository. Luego, utiliza el método getProducts() de este servicio para recibir todos los productos (que en realidad solo están registrados en una matriz en ese servicio).

Ahora veamos el segundo enlace:

Aquí tenemos un Servicio de Comentarios. Esta vez los datos no se almacenan en este servicio. Solo tenemos el método llamado getComments() que a su vez ejecuta otro método de un servicio api. Entonces, para resumir: tenemos un componente (ArticleComponent) y se inyecta el CommentsService. Luego llama a getComments() en ese servicio, que en realidad envía una solicitud http.get al servidor cada vez que se llama.


Ahora mi pregunta es sobre la diferencia entre estos enfoques y las consecuencias. Por lo que entiendo, en el primer caso, todos los datos se toman del servidor solo una vez (cuando se carga la aplicación) y luego se almacenan en servicios llamados SomethingRepository (ProductRepository, etc.). Sin embargo, en el segundo enlace, cada vez que usamos un servicio (en cualquier componente), recibimos los datos directamente del servidor.

¿Cuál es la mejor práctica al respecto? Solo me preocupa que si usamos el enfoque que se presenta en el libro, entonces no siempre obtendremos los datos "más recientes" posibles, porque si otro cliente cambió algo mientras tanto, todavía tratamos con los datos que se descargaron cuando nuestro la aplicación se estaba cargando. Por otro lado, el segundo enfoque puede influir en nuestra posibilidad de compartir datos entre los componentes.

Estoy realmente confundido con esto y no estoy seguro de si debería mantener todo el modelo en mi aplicación y tener algún tipo de repositorios, o tal vez el segundo enfoque sea mejor. Gracias por cualquier ayuda.

about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Es muy poco probable que una colección de productos cambie en el tiempo que pasa en ese sitio web. Lo que en este caso hace que sea mucho más relevante almacenar en caché los datos obtenidos.

Una colección de comentarios, por ejemplo en un tablero de mensajes activo, puede cambiar varias veces durante una sola visita a la página. Esta es probablemente la razón por la que eligen llamar siempre desde el servicio cuando se obtiene el cobro. Aunque en mi opinión, esta no es la forma correcta de hacerlo. Mejor sería usar una conexión websocket y actualizar la colección desde el servidor, en lugar de obtener la colección cada vez, con la alta probabilidad de que nada haya cambiado.

Entonces, para resumir, depende de cada caso, de una colección a otra, qué tipo de almacenamiento en caché le gustaría usar. Pero mi recomendación es llamar al servidor solo una vez, si se trata de datos estáticos como una matriz de productos. Y cuando se trata de datos dinámicos, debe usar websockets para mantener la colección.

about 4 years ago · Santiago Trujillo Denunciar

0

Desafortunadamente, como ocurre con la mayor parte del desarrollo de software, la respuesta a qué enfoque es mejor es: "depende".

Como ha identificado claramente, el riesgo con el enfoque de almacenar los datos del lado del cliente es que si otro usuario cambia algo, corre el riesgo de tener un caché local de datos obsoletos. Si eso importa o no depende de la aplicación y el tipo de datos que se almacenan en caché y con qué frecuencia esos datos cambian, etc. Pero obtienes un mejor rendimiento desde el punto de vista de no tener que ir al servidor cada vez para obtener la lista. . Algunos tipos de datos son mucho más seguros para almacenar en caché de esta manera (por ejemplo, la lista de estados de EE. UU. o incluso un catálogo de productos que no es demasiado grande y no cambia por minuto); para otras aplicaciones, simplemente no puede permitirse tener datos obsoletos.

Por lo tanto, mi conclusión sería utilizar el enfoque que mejor se adapte a los datos disponibles. Muchas veces, la complejidad adicional de lidiar con la invalidación de un caché no vale los beneficios de rendimiento que brinda, pero eso nunca es una declaración general que pueda usar en todas las situaciones. Conozca los diferentes enfoques y los beneficios y compensaciones para saber cuándo aplicar qué técnica.

PD. Es probable que esta pregunta se cierre por estar basada en una opinión. Podría ser más adecuado para: http://softwareengineering.stackexchange.com

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda