В настоящее время я думаю об интерфейсе для класса, который я пишу. Этот класс содержит стили для символа, например, выделен ли он жирным шрифтом, курсивом, подчеркнут и т. Д. Я уже два дня спорю сам с собой о том, следует ли использовать методы получения / установки или логические имена для методов, которые изменяют значения на эти стили. Хотя я предпочитаю логические имена, это означает написание кода, который не так эффективен и не так логичен. Позвольте привести пример.
У меня есть класс , CharacterStyles
который имеет переменные член bold
, italic
, underline
(и некоторые другие, но я оставлю их для простоты). Самый простой способ разрешить другим частям программы доступ к этим переменным - написать методы getter / setter, чтобы вы могли делать styles.setBold(true)
и styles.setItalic(false)
.
Но мне это не нравится. Не только потому, что многие люди говорят, что геттеры / сеттеры нарушают инкапсуляцию (неужели это так плохо?), Но в основном потому, что это не кажется мне логичным. Я ожидаю стилизовать персонажа одним методом styles.format("bold", true)
или чем-то подобным, но не всеми этими методами.
Хотя есть одна проблема. Поскольку вы не можете получить доступ к переменной-члену объекта по содержимому строки в C ++, я должен был бы либо написать большой контейнер if-Statement / switch для всех стилей, либо мне пришлось бы хранить стили в ассоциативном массиве ( карта).
Я не могу понять, как лучше. В один момент я думаю, что должен написать геттеры / сеттеры, а в следующий момент я склоняюсь в другую сторону. Мой вопрос: что бы вы сделали? И зачем ты это делаешь?
bold
установленным в true
и другими неопределенными переменными, методы получения для других переменных должны возвращать значение родительского стиля (который хранится в другом свойстве), в то время как получение для bold
свойства должно возвращаться true
. Есть и другие вещи, такие как имя и способ отображения в интерфейсе.