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