Configurazioni condivise tra back-end e frontend

0

Ho alcuni dati (elenco di parametri) che dovrebbero essere condivisi tra il backend e il frontend. Le modifiche sono davvero infrequenti e le modifiche in genere indicano una ridistribuzione. Attualmente, è memorizzato nel DB, alcune tabelle hanno chiavi esterne. Estendendo la funzionalità abbiamo dovuto continuare ad aggiungere nuove e nuove proprietà su questi oggetti, per poterne filtrare su un certo insieme. Poiché queste proprietà si sovrappongono spesso, ora è un gran casino. Recentemente ho avuto l'idea di archiviare questi parametri in un file descrittore indipendente dal linguaggio (JSON / toml / yaml) in un repository separato e distribuire un modulo js per il frontend e un modulo python per il back-end da questa configurazione. I parametri possono essere aggiunti agli elenchi, quindi il problema delle proprietà sovrapposte sarebbe risolto, potrei semplicemente aggiungerli agli elenchi nel file descrittore. La chiave esterna non è davvero un grosso problema, l'interrogazione del DB può essere eseguita con un campo testo / enumerazione. L'unica cosa è che le voci correlate non verranno rimosse, è necessaria una migrazione personalizzata.

Vantaggi:  - Meno richieste dal cliente  - Penso che sarebbe più semplice archiviarli e raggrupparli

Svantaggi:  - Forse sarebbe un po 'più difficile capire come funzioni questa cosa e quali modifiche debbano essere apportate per estendere questa funzionalità.

Poiché le cose vanno nella direzione opposta di solito (le persone spostano le cose nel DB invece di rimuoverle da lì), vorrei chiedere se qualcuno ha fatto qualcosa di simile e se è una buona idea o no?

Penso che sia irrilevante, ma il frontend è scritto in Angular 1.x e il backend è Django + Python.

    
posta fodma1 21.06.2017 - 14:21
fonte

1 risposta

1

Vorrei allontanarmi dalla memoria DB se solo perché se hai un file di configurazione yaml / json nel tuo progetto, non è ovvio che possano e verranno rigenerati completamente nelle versioni future. Alla fine aggiunge solo confusione. In alternativa, rilascia le configurazioni yaml / json locali del progetto a favore di solo archiviazione DB.

Il progetto dovrebbe avere un'unica fonte ovvia per la configurazione, che si tratti del DB o del file yaml / json locale o anche di un file yaml / json in un repository separato. Al contrario, all'avvio del progetto, è possibile eseguire prima la logica di ottimizzazione, ad esempio generare un file yaml dal database al momento dell'esecuzione o generare una versione json frontend della configurazione backend yaml. Meglio ancora se puoi usare solo JSON che può potenzialmente funzionare sia backend che frontend senza cambiamenti aggiunti.

Altrimenti, il rischio è che uno sviluppatore aggiunga una nuova funzionalità nel tuo programma che dipende da una nuova configurazione che lo sviluppatore ha aggiunto alla configurazione yaml / json locale all'interno del progetto. Funziona fino a quando non si rigenera il file di configurazione e lo si invia alla produzione, dopodiché non lo fa. ;)

In altre parole, dovrebbe esserci solo una copia persistente della configurazione salvata nel repository o salvata nel database, ma non più di una per evitare confusione. Da lì puoi scegliere di ottimizzare una configurazione locale se non si trova la prima volta che il programma viene eseguito, se lo desideri.

Spero che ti aiuti!

    
risposta data 21.06.2017 - 14:48
fonte

Leggi altre domande sui tag