Ich denke gerade über eine Schnittstelle zu einer Klasse nach, die ich schreibe. Diese Klasse enthält Stile für ein Zeichen, zum Beispiel, ob das Zeichen fett, kursiv, unterstrichen usw. ist. Ich habe zwei Tage lang mit mir selbst diskutiert, ob ich für die Methoden, die die Werte in ändern, Getter / Setter oder logische Namen verwenden soll diese Stile. Ich bevorzuge zwar logische Namen, aber es bedeutet, Code zu schreiben, der nicht so effizient und nicht so logisch ist. Lassen Sie mich Ihnen ein Beispiel geben.
Ich habe eine Klasse bekam CharacterStyles
die Membervariablen hat bold
, italic
, underline
(und einige andere, aber ich werde sie auslassen es einfach zu halten). Die einfachste Möglichkeit, anderen Programmteilen den Zugriff auf diese Variablen zu ermöglichen, besteht darin, Get- / Setter-Methoden zu schreiben, damit Sie styles.setBold(true)
und ausführen können styles.setItalic(false)
.
Aber das gefällt mir nicht. Nicht nur, weil viele Leute sagen, dass Getter / Setter die Kapselung sprengen (ist das wirklich so schlimm?), Sondern vor allem, weil es mir nicht logisch erscheint. Ich erwarte, einen Charakter mit einer styles.format("bold", true)
oder einer ähnlichen Methode zu stylen, aber nicht mit all diesen Methoden.
Es gibt jedoch ein Problem. Da Sie in C ++ nicht über den Inhalt eines Strings auf eine Objektelementvariable zugreifen können, müsste ich entweder einen großen if-Anweisungs- / switch-Container für alle Stile schreiben oder die Stile in einem assoziativen Array speichern ( Karte).
Ich kann nicht herausfinden, was der beste Weg ist. In einem Moment denke ich, ich sollte die Getter / Setter schreiben, und im nächsten Moment beuge ich mich in die andere Richtung. Meine Frage ist: Was würdest du tun? Und warum würdest du das tun?
bold
set to true
und den anderen Variablen undefined habe, sollten die Getter-Methoden für die anderen Variablen den Wert des übergeordneten Stils (der in einer anderen Eigenschaft gespeichert ist) zurückgeben, während der Getter für die bold
Eigenschaft zurückgeben sollte true
. Es gibt noch einige andere Dinge wie einen Namen und die Art und Weise, wie er in der Benutzeroberfläche angezeigt wird.