--- 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) --- ![](https://i.imgur.com/XcZoCM3.png) *Implementazione Athlete - grafo* -- ![](https://i.imgur.com/pDiZ0Mq.png) *Implementazione Athlete - model MongoDB* Gab e Rob