Разные функции или одно присваиваемое свойство с побочными эффектами?

Я разрабатываю / пишу небольшой инструментарий пользовательского интерфейса (в целях самосовершенствования, что еще?), И я не уверен, какой API будет лучше в следующих смыслах:

  1. самый низкий WTF? уровень.
  2. самый гибкий.
  3. самый краткий, но описательный
  4. лучше всего подходит со стандартом C ++.

Некоторые важные элементы:

  • window класс представляет собой окно, и может быть показано, скрыто, свернуто, развернуто, развернуто на весь экран и закрыто.
  • у меня есть proxy_property класс, которому могут быть назначены произвольные функции get и set, например, отражает текущее значение, которое должно быть извлечено или установлено через некоторый внешний вызов API.
  • у меня тоже есть property класс, к которому можно подключиться (т.е. наблюдать), и когда ему будет назначено новое / другое значение, он сообщит это новое значение своим наблюдателям.

Я не уверен, что лучший способ обработать состояние окна:

  1. Закрытая членская переменная, доступная только через hide(), isVisible() и др. функции-члены, стиль Qt.
  2. свойство только для чтения (потребуется дополнительная реализация, так как в настоящее время это не решено), которое поддерживается hide(), show()и т. д. получают и обновляют соответственно.
  3. proxy_property которому может быть назначено новое состояние, в результате чего hide(), show()и т. д. или их комбинацию при назначении нового значения.

На первый взгляд, я предпочел бы номер 3 по причине 3, но в свете других условий я не уверен, насколько хорошо этот дизайн выдержит. Достаточно сказать, что я не видел, чтобы мой номер 3 использовался где-либо, и я боюсь слишком сильно опираться на мой proxy_property Концепция, поскольку это может повлечь за собой больше накладных расходов, чем стоит (с другой стороны, это код пользовательского интерфейса, о котором мы говорим, поэтому накладные расходы, тем не менее, будут).

Для ясности:

enum class window_state { windowed, hidden, minimized, maximized, fullscreen_maximized };
class window
{
public:
proxy_property<window_state> state;
//....
};

Так можно сделать

some_window.state = window_state::minimized;

На самом деле сделать что-то более традиционно сделанное, например,

some_window.minimize();

Конечный результат будет функционально идентичен, конечно. Это просто API, который совершенно другой.

0

Решение

Я думаю, что вы должны быть осторожны, чтобы различать свойства, которые вы можете установить (например, скажем, visibility из свойств, которые вы можете наблюдать (например, isVisible), потому что во многих случаях наблюдаемые свойства зависят не только от настроек.

Контроль, например isVisible если это имеет visibility == true И это контейнер isVisible,

Там нет причин, чтобы сделать контроль visibility установление наблюдаемого, и это факт, что, вероятно, приведет к ошибкам.

По этой причине я бы предпочел сеттеры и геттеры для visibilityи прослушиваемое свойство для isVisible,

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]