Sono nuovo di OOP e un sacco di volte sono diventato perplesso in situazioni simili a questo esempio:
Attività: genera un documento XML che contiene informazioni su una persona. Supponiamo che le informazioni siano prontamente disponibili in un database. Ecco un esempio della struttura:
<Person>
<Name>John Doe</Name>
<Age>21</Age>
<Address>
<Street>100 Main St.</Street>
<City>Sylvania</City>
<State>OH</State>
</Address>
<Relatives>
<Parents>
<Mother>
<Name>Jane Doe</Name>
</Mother>
<Father>
<Name>John Doe Sr.</Name>
</Father>
</Parents>
<Siblings>
<Brother>
<Name>Jeff Doe</Name>
</Brother>
<Brother>
<Name>Steven Doe</Name>
</Brother>
</Siblings>
</Relatives>
</Person>
- Ok consente di creare una classe per ogni tag (ad esempio: Persona, Nome, Età, Indirizzo) Supponiamo che ogni classe sia responsabile solo per se stessa e per il elementi direttamente contenuti
- Ogni classe saprà (definita da default) le classi che sono direttamente contenute in esse
- Ogni la classe avrà una funzione process () che aggiungerà se stessa e la sua i bambini al documento XML che stiamo creando
- Quando un bambino viene disegnato, come nella riga precedente, avremo anche loro il processo di chiamata ()
-
Ora siamo in un ciclo ricorsivo in cui ogni oggetto disegna i propri figli fino a quando tutti sono disegnati
-
Ma cosa succede se solo alcuni dei tag devono essere disegnati, e il resto lo sono opzionale? Alcuni sono opzionali in base a se i dati esistono (se li abbiamo esso, dobbiamo disegnarlo), e alcuni sono opzionali in base alle preferenze dell'utente che genera il documento
- Come ci assicuriamo che ogni oggetto ha i dati di cui ha bisogno per disegnare se stesso e i suoi figli? Possiamo passare una vasta schiera attraverso ogni oggetto, ma sembra schifoso non è vero? Potremmo avere ogni oggetto interrogare il database per questo, ma ci sono molte domande e come fa a sapere qual è la sua domanda?
- Cosa se vogliamo sbarazzarci di un tag più tardi? Non c'è modo di fare riferimento loro.
Ci ho pensato per 20 ore ora. Sento di fraintendere un principio di progettazione o mi sto avvicinando a questo tutto sbagliato. Come faresti a programmare qualcosa di simile?
Suppongo che questo problema possa essere applicato a qualsiasi scenario in cui esistono classi che creano altre classi, ma le classi create necessitano di informazioni da eseguire. Come faccio a ottenere loro le informazioni in un modo che non sembra disordinato?