Supponiamo di avere una lista di oggetti derivati da qualche base:
class Circle : public Shape;
class Rectangle : public Shape;
C'è un oggetto, che ha il vettore di Shape *
come variabile membro:
class Screen {
std::vector<Shape *> shapes_;
}
Ma ora ho bisogno di persistere nel database (PostgreSQL per essere precisi). L'unico modo che ho pensato è avere una tabella per classe, qualcosa del genere:
table screen ();
table circle (
int screen_id;
);
table rectangle (
int screen_id;
);
E dopo aver recuperato dall'oggetto di tipo Schermo, esegui una ricerca di cerchie e rettangoli con screen.id. Dovrebbe essere fattibile.
Tuttavia temo che quando il numero di tipi crescerà (e lo sarà), significherebbe molte query db per un solo oggetto recupero / persist.
Sapete che avremo circa 10 tipi che penso? Quelle sono 11 query db solo per recuperare un oggetto Screen.
Quindi la mia ricerca è, c'è un modo migliore per raggiungere il mio obiettivo? Sto bene con la riprogettazione del mio codice, se necessario, vorrei solo qualche soluzione O (1) in correlazione al numero di tipi (la mia soluzione è O (n)).
Grazie ragazzi ^ _ ^
NOTA: in base al commento, aggiungo che le tabelle di cerchi e rettangoli e così via verranno utilizzate solo per mettere insieme oggetto Screen. Non riesco ad accedere (cercare, recuperare, persistere, ...) a loro individualmente, solo come parti di Screen (s). Non hanno nemmeno bisogno di essere nel loro tavolo. Semplicemente non ho trovato il modo di mettere tutto insieme bene: /