Risposta rapida: l'utilizzo dei metodi getter e setter nel modo in cui descrivi molto probabilmente andrà bene. E rimuoverli non risolverà alcun problema concreto.
Risposta più lunga
Ricorda che l'incapsulamento riguarda nascondere le informazioni . Formalmente, quello che vuoi è una struttura dati - i tuoi campi privati - che è solo mai accessibile e modificato tramite un set fisso di routine - i tuoi metodi. Ciò migliora la manutenzione, perché se si desidera modificare la struttura dei dati interna, è sufficiente passare attraverso il set di routine finito per effettuare l'aggiornamento, piuttosto che l'intero programma. È facile vedere il vantaggio :).
Il problema in get / set viene quando esponi informazioni sull'implementazione . Prendiamo l'esempio dell'esposizione di una connessione al database. All'improvviso, hai dichiarato al mondo che il tuo oggetto parla con un database. Il codice client utilizzerà quella connessione per fare altre cose. 2 anni dopo, rimuovi il database, non è più necessario. Ma il codice client si aspetta una connessione al vecchio database! Non puoi cambiare il tuo oggetto nel modo desiderato e devi portare in giro cianfrusaglie inutili ... hai esposto dettagli che non dovresti!
In un altro caso, però, non hai nulla da nascondere: un cliente è un ID, un nome e un numero di telefono. Non nasconderlo, è proprio ciò di cui ha bisogno il codice cliente! Molteplici parti dell'applicazione richiedono questo per fare il loro lavoro: l'interfaccia utente visualizzerà una versione formattata per l'utente, il database salverà e leggerà il valore, una libreria JSON serializzerà le informazioni per inviare un ordine a una terza parte. Questa è informazioni commerciali . Deve essere accessibile per essere utile. In tal caso, un getter - e forse un setter - è perfettamente valido.
Nel tuo caso: se il getter nella tua logica aziendale nasconde il tuo modello, è perfettamente a posto. Usali. Un design getter-less non può essere migliore.
Come nota finale: le persone sono spesso contro getter a causa di qualcosa chiamato "tell do not ask". Questo è un problema completamente diverso dall'incapsulamento. È una filosofia di design, e i benefici sono meno chiari che con l'occultamento delle informazioni. Quest'ultimo era già noto negli anni '70, mentre il primo è un'invenzione più recente. "Dillo non chiedere" è meraviglioso per alcune applicazioni, in particolare quelle basate sugli eventi. Purtroppo, funziona male con le applicazioni CRUD, dove l'intero punto è chiedere informazioni. Supponendo che tu esca dallo specifico insieme di problemi che "tell do not ask" risolve, usa getter senza alcun senso di colpa. Ricorda solo di nascondere la tua implementazione .