Spero di ottenere un controllo di integrità nel mio pensiero progettuale.
Sto lavorando con un piccolo team su un sito web basato su un database MongoDB. Ci sono diverse raccolte nel DB, ad esempio una che rappresenta persone e una che rappresenta i sondaggi. Le persone votano nei sondaggi e i loro voti sono registrati in una matrice votes
in ciascun sondaggio, come un documento con il numero identificativo della persona e il voto che hanno espresso (ad esempio, sì o no). Le persone hanno informazioni sulla posizione e altre informazioni sul profilo.
Tutto il codice è in Python. Allo scopo di estrarre dati dal DB per un'API e per la visualizzazione web, sto pensando di creare una classe Person e una classe Poll. Ognuno di questi avrebbe metodi per ottenere dati dalle altre raccolte.
Ad esempio, una persona avrebbe Person.get_polls()
o Person.get_votes()
che andrebbero nell'altra raccolta e recupereranno tutti i sondaggi a cui una persona ha partecipato e troveranno i voti che hanno inserito in ciascuno di essi. Allo stesso modo, un sondaggio avrebbe Poll.get_persons()
che restituirebbe l'elenco di dati personali dalla raccolta Persone per tutti coloro che avevano votato in quel sondaggio.
Ogni volta che uno sviluppatore vuole che una caratteristica ottenga sondaggi o persone, passerà attraverso questo sistema di classe, piuttosto che accedere al database direttamente con le query di pymongo, perché le query verrebbero incorporate nelle classi.
È un approccio standard? Ciò promuove la flessibilità perché possiamo cambiare facilmente il nostro database semplicemente cambiando le implementazioni del metodo una volta? O riduce la flessibilità perché lega tutto all'utilizzo di quelle classi?