Где я могу хранить загруженные текстуры, используемые для визуализации определенного объекта? - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть класс рисования Button. Должны ли его текстуры храниться и скрываться внутри:

class Button {
 private:
  Texture idle, hovered, clicked;
 public:
  void draw_self(Window&, Position) const;
};
void App::draw() {
  button.draw_self(window, position);
}

... или более разумно вспомнить какой-нибудь прокси и предоставить бездушный добытчик для использования в "умных" абстракциях?

class Button {
 private:
  std::string idle_tag, hovered_tag, clicked_tag;
 public:
  std::string const& get_texture_tag() const; // returns one of its tags
};
class Drawer {
 private:
  std::map<std::string, Texture> textures;
 public:
  void draw(std::string const&, Position) const;
};
void App::draw() {
  drawer.draw(button.get_texture_tag(), position);
}

Первый подход, по-видимому, представляет Button как полностью составленный объект, но осведомленный о подмодуле рисования. Второй дизайн избавляет от такой связи и (вероятно) легче распараллелить; однако его Button выглядит как глупый DTO и предоставляет гораздо менее удобный интерфейс (хотя в приведенных примерах разница не заметна, реальный - болезненный).

Какое решение обычно предпочитается и почему ? Есть ли какие-либо возможные проблемы (или другие решения), которые я не заметил?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...