Attualmente sto pensando a un'interfaccia per una classe che sto scrivendo. Questa classe contiene stili per un personaggio, ad esempio se il carattere è grassetto, corsivo, sottolineato, ecc. Ho discusso con me stesso per due giorni se dovrei usare getter / setter o nomi logici per i metodi che cambiano i valori in questi stili. Mentre io preferisco i nomi logici, vuol dire scrivere codice che non è altrettanto efficiente e non logico. Lascia che ti faccia un esempio.
Ho una classe CharacterStyles
che ha variabili membro bold
, italic
, underline
(e alcune altre, ma le lascerò fuori per mantenerla semplice). Il modo più semplice per consentire ad altre parti del programma di accedere a queste variabili, è scrivere metodi getter / setter, in modo che tu possa fare styles.setBold(true)
e styles.setItalic(false)
.
Ma non mi piace. Non solo perché molte persone dicono che i getter / setter rompono l'incapsulamento (è davvero così brutto?), Ma soprattutto perché non mi sembra logico. Mi aspetto di disegnare un personaggio attraverso un metodo, styles.format("bold", true)
o qualcosa del genere, ma non attraverso tutti questi metodi.
C'è un problema però. Dal momento che non puoi accedere a una variabile membro dell'oggetto dal contenuto di una stringa in C ++, dovrei scrivere un grande contenitore if-statement / switch per tutti gli stili, o dovrei memorizzare gli stili in una matrice associativa ( mappa).
Non riesco a capire quale sia il modo migliore. Un momento penso che dovrei scrivere i getter / setter, e il momento dopo mi chino verso l'altro modo. La mia domanda è: cosa faresti? E perché lo faresti?