Mi è stato insegnato che un oggetto dovrebbe sapere come fare tutto con se stesso. Così ho creato un'applicazione cercando di mantenere privati i campi e ho un sacco di metodi come questi:
- DisplayGraphically ()
- DisplayAsText ()
- WriteToFile ()
- Applica ()
- Modifica () (mostra una finestra di dialogo per modificarlo)
- ErrorCheck ()
Ora voglio salvare i dati in un altro formato di file la cui struttura non corrisponde strettamente alla mia struttura di oggetti. Sarebbe facile se tutti i dati fossero pubblici. Quindi un singolo metodo potrebbe raccogliere tutti i vari bit di dati dagli oggetti e riorganizzarli in base al formato del file. Ma questo significa esporre campi privati (attraverso i getter). D'altra parte, questo è ciò che l'API fornirebbe e sicuramente fare questo lavoro attraverso un'API sarebbe abbastanza pulito.
Per riassumere, quale è meglio in quali casi?
- I campi sono privati. Gli oggetti hanno molti metodi per gestire molti usi diversi.
- I campi hanno getter e setter pubblici che mantengono lo stato interno corretto. La nuova funzionalità che coinvolge molti oggetti può essere incapsulata nella sua classe e non richiede alcuna modifica del codice esistente.