Sto scrivendo applicazioni in C ++ usando un database sqlite. Supponiamo che io abbia un semplice sistema utente con un database utente.
Classe utente
class User {
private:
void LoadFromDatabase(uint32_t id);
public:
std::string name;
uint32_t age;
void SayHello();
void SetAge(uint32_t age);
};
Tabella utenti
+-------+-----+
| Name | Age |
+-------+-----+
| Billy | 22 |
| Bob | 44 |
+-------+-----+
Quando ottengo i dati dal database, mi piace memorizzare le cose negli oggetti riga, quindi è molto facile capire cosa c'è nella riga (altrimenti è un puntatore a un array di caratteri e dovresti sapere qual è l'indice di ogni colonna ). È qui che entra in gioco il problema della ridondanza.
Riga utente
class UserRow {
public:
std::string name;
uint32_t age;
};
Quindi ora ho ripetuto le proprietà della classe tra due classi. Questo è ovviamente un esempio banale, ma a volte le righe hanno 10 o più colonne. Una soluzione sarebbe sbarazzarsi di UserRow e passare attorno a User , ma il database non dovrebbe sapere nulla su User e essere come più stupido possibile. Un'altra soluzione potrebbe essere avere User.properties che è = a UserRow , ma che lo rende meno accessibile.
Quale sarebbe il modo migliore per evitare questi campi / classi duplicati?