Je pense actuellement à une interface avec une classe que j'écris. Cette classe contient des styles pour un caractère, par exemple si le caractère est en gras, en italique, souligné, etc. Je discute avec moi-même depuis deux jours si je dois utiliser des getters / setters ou des noms logiques pour les méthodes qui changent les valeurs en ces styles. Bien que j'ai tendance à préférer les noms logiques, cela signifie écrire du code qui n'est pas aussi efficace et pas aussi logique. Laisse moi te donner un exemple.
J'ai une classe CharacterStyles
qui a des variables membres bold
, italic
, underline
(et quelques autres, mais je vais les laisser garder les choses simples). La façon la plus simple d'autoriser d'autres parties du programme à accéder à ces variables serait d'écrire des méthodes getter / setter, afin que vous puissiez faire styles.setBold(true)
et styles.setItalic(false)
.
Mais je n'aime pas ça. Non seulement parce que beaucoup de gens disent que les getters / setters cassent l'encapsulation (est-ce vraiment si mauvais?), Mais surtout parce que cela ne me semble pas logique. Je m'attends à styliser un personnage à travers une méthode, styles.format("bold", true)
ou quelque chose comme ça, mais pas à travers toutes ces méthodes.
Mais il y a un problème. Étant donné que vous ne pouvez pas accéder à une variable membre d'objet par le contenu d'une chaîne en C ++, je devrais soit écrire un grand conteneur d'instructions if / switch pour tous les styles, soit je devrais stocker les styles dans un tableau associatif ( carte).
Je ne peux pas comprendre quelle est la meilleure façon. Un instant, je pense que je devrais écrire les getters / setters, et l'instant suivant, je me penche dans l'autre sens. Ma question est: que feriez-vous? Et pourquoi feriez-vous ça?
bold
set to true
et que les autres variables ne sont pas définies, les méthodes getter pour les autres variables doivent renvoyer la valeur du style parent (qui est stocké dans une autre propriété), tandis que le getter de la bold
propriété doit retourner true
. Il y a d'autres choses comme un nom et la façon dont il s'affiche également dans l'interface.