architettura dell'app gui con diverse finestre indipendenti e backlite sqlite

1

Supponiamo di avere uno schema di database così semplice:

CREATE TABLE tbl(key INTEGER PRIMARY KEY, cap TEXT NOT NULL);

Voglio mostrare almeno tre finestre GUI indipendenti. Una finestra ( window A ) con una lista di elementi, se scelgo un articolo dovrebbe essere possibile aprire window B , che consente di eliminare o aggiornare l'elemento. Inoltre dovrebbe essere possibile per aprire window B per creare un nuovo elemento. Suppongo un compito normale per molte applicazioni. Ma voglio fare window B per non essere una finestra di dialogo modale, inoltre consenti di creare diverse finestre di dialogo di tipo window B .

Come dovrei rendere il contenuto coerente di queste finestre?

Ad esempio, se creo:

struct Record {
  int64_t id;
  std::string text;
};

e class Db che incapsulano semplici update , select , insert e delete SQL affermazioni non sarebbero sufficienti.

Per esempio posso aprire window B con l'ultimo elemento in tbl , il valore massimo di key colonna, che lo riapre in altri window B , ed eliminalo, dopodiché crea un nuovo oggetto, e questo elemento otterrà lo stesso valore key di quello cancellato. Quindi ho due window B con lo stesso key , ma diverso cap .

Devo creare in Db cache di classe con std::shared_ptr<Record> ? E aggiungi la possibilità di iscriverti su std::shared_ptr<Record> cambiamenti?

Oppure potrebbe esserci un altro modo standard per gestire una situazione come questa?

    
posta user1244932 11.01.2018 - 13:57
fonte

1 risposta

1

La tua finestra (o la tua app) non dovrebbe assegnare chiavi - il DB lo fa. Pertanto, se si desidera creare un nuovo record, è sufficiente chiedere all'utente di inserire ciò che sarà cap . Quindi insert nel DB come nuovo record, restituisce il nuovo key e aggiorni l'oggetto Record dietro la finestra (o ne crei uno completamente nuovo). Ciò significa che, nel tuo scenario, dopo aver eliminato l'ultimo elemento in tbl e averne creato uno nuovo, avrà una chiave diversa dall'elemento appena eliminato.

Puoi certamente ascoltare le modifiche a Record e aggiornare l'interfaccia utente in qualche modo (i nuovi dati disponibili, il record non esiste più, ecc.).

    
risposta data 11.01.2018 - 18:14
fonte

Leggi altre domande sui tag