Ho una classe Song
, che ha i seguenti metodi pubblici:
String getSong();
void setSong(String);
int getId();
void setId(int);
Ora ho due modi diversi per memorizzare questi brani in un database:
- solo due colonne; uno per ID, uno per l'intero testo del brano
- tre colonne; uno per ID, uno per il numero di riga e uno per quella linea
[ Si prega di ignorare i problemi di progettazione di DB; è importante solo che i due schemi siano diversi. ]
Quindi ho bisogno di un modo per cambiare il modo in cui le canzoni sono scritte / lette dal / al database. Ciò potrebbe anche significare prendere una decisione runtime su quale schema io uso. Qual è il modo OO corretto per farlo? Mi sento come se lo schema della strategia funzionasse qui, ma non riesco a collegarlo tutto insieme. Alcune domande su cui mi sono confrontato:
- Dovrebbe esserci un oggetto separato per ogni lettura e ogni scrittura? O una classe dovrebbe implementare sia una lettura che una scrittura?
- Come posso evitare la logica duplicata? Ad esempio, metodo (2) significa che il metodo di scrittura divide la canzone su newline, mentre il metodo di lettura li unisce. C'è un modo per combinare la logica simile qui?
- Che cosa succede se
Song
non ha setter pubblici? Come cambia il design?
Ho avuto davvero difficoltà a risolvere questo in modo pulito e in un modo flessibile orientato agli oggetti, quindi qualsiasi aiuto sarebbe fantastico.