---
tags: brainstorming
---
# GraphQL
**Non si evita la duplicazione dei dati**
* Accesso semplice tramite nodi per la lettura dei dati (es. athlete -> nome team di appartenza)
* Duplicazione necessaria per tutti quei campi che bisogna cercare, filtrare o ordinare dal nodo di riferimento (es valori quota, nomecognome ecc)
* Semplifica l'accesso ai dati tramite il grafo (con caching e gestione dei permessi migliore)
* Diminuisce il numero di chiamate necessarie a popolare una schermata, rende più flessibile il retrive dei dati
* Fornisce una documentazione chiara del dominio di Golee, sempre aggiornata. Con Apollo Studio si individuano le chiamate lente e l'utilizzo di determinati campi sui client (con percentuali e statistiche)
* Possibilità di avere un layer "logico" non vincolato alla rappresentazione del dato sul db (il grafo non rappresenta necessariamente i dati come sono schiantati nel db)
---
**Nel pratico**
* Si rimuovono quei dati che abbiamo dulpicati solo per visualizzarli ma che non ci interessa ne filtrare ne ordinare (es club_name, team_name in athlete, nome_athlete in convocazioni ecc ecc)
* Cogliendo l'occasione si rinominano i campi in lettura (il model non ha l'ownership) con __ (es nome e cognome in athlete per ricerca -> `__namesurname`)
* Si rimuove il servizio search (non è strettamente legato a gql)
---

*Implementazione Athlete - grafo*
--

*Implementazione Athlete - model MongoDB*
Gab e Rob