La scrittura di alcuni servizi su un sistema su cui sto lavorando ha sollevato alcune domande su come fornire i dati formattati per il client (viste o app per dispositivi mobili). Fondamentalmente, il mio dubbio nasce ogni volta che ho bisogno di fornire dati o dati raggruppati che devono essere modificati dopo la query.
Userò come esempio una relazione Has Many Through:
countries
id - integer
name - string
users
id - integer
country_id - integer
name - string
posts
id - integer
user_id - integer
title - string
Sto usando l'esempio di base che usa il framework Laravel. Ma la mia struttura è un po 'più complessa. Ad ogni modo, proverò a mettere insieme uno scenario basato su questa struttura.
Supponiamo che, per regola aziendale, ogni volta che devo elencare i post, essi dovranno essere raggruppati per paesi. Pertanto, ritengo che, in quanto requisito della regola aziendale, ogni volta che i miei clienti richiedono post, il servizio post deve fornire i dati raggruppati.
Nel caso di cui sopra è molto semplice, nel caso reale devo raggruppare ulteriormente, modificare alcune informazioni dei campi di ogni record del paese e dei loro rispettivi post. E a questo punto, mi chiedo sempre quale sia il modo "migliore" per realizzare questa formattazione dei dati.
- Ho lavorato su sistemi che i campi che dovevano essere modificati, erano già stati risolti attraverso una vista nel database che creava le relazioni necessarie e forniva già tutto pronto. Lasciando che la programmazione risolva il raggruppamento dei dati e le possibili modifiche delle strutture.
- In altri sistemi, abbiamo utilizzato un potente ORM che poteva fare grandi join interiori mantenendo le prestazioni (che non è il caso di tutte le ORM).
- E in altri casi, a causa della lentezza generata dal framework ORM che abbiamo usato, abbiamo fatto diverse piccole query e poi raggruppato e modificato i dati a livello di codice in strutture ripetitive.
Prima domanda: c'è un modo GIUSTO per fare questo tipo di lavoro?
Seconda domanda: se si tratta di una domanda CASE (che ritengo possa essere), se in qualsiasi progetto creo diversi modi per raggruppare i dati, creerò un codice errato?
Terza domanda: se per caso decido di eseguire i raggruppamenti di dati a livello di codice, creare una query nel database e quindi modificare lo stato di tale risultato nel codice, sarebbe una cattiva pratica?
A volte penso che le viste nel database siano sempre le migliori soluzioni. Ma nel mio caso reale, ci sono quasi 120 tavoli. E ho già un sacco di codice che si occupa di grandi strutture di relazione a livello di programmazione da quelle tabelle. Penso che iniziare a scrivere viste ora creerebbe un disordine da dove si trova la regola aziendale.
Che ne pensi di tutti questi casi?
Grazie in anticipo!