«Соединение» объектов nonGUI с объектами GUI - PullRequest
1 голос
/ 13 января 2009

У меня есть набор не-GUI объектов, которые имеют отношение один к одному с объектами GUI. Все события направляются через окно верхнего уровня.

Многие (не все) события, происходящие с объектом GUI, приводят к вызову метода для связанного объекта.

Некоторые методы в объектах NonGui, которые при вызове изменяют объекты GUI.

В качестве примера можно привести игру вроде Rogue с современным графическим интерфейсом. У вас есть область, которую игрок занимает за один ход (назовите это областью) и у вас есть объект (кнопка), связанный с ним в графическом интерфейсе. Имейте в виду, что это всего лишь аналогия (и даже не настоящая проблема), и никакая аналогия не идеальна.

Вопрос в том, как создать такую ​​вещь?

Поскольку класс кнопки из сторонней библиотеки, я не могу вставить ссылку на объект nonGUI в него, хотя я могу вставить ссылку на объект GUI в объект nonGUI. Похоже, мне нужно будет создать карту от кнопок до «регионов» где-нибудь, но куда мне ее поместить? В окне верхнего уровня? В модели верхнего уровня? У IU есть какой-то класс интерфейса?

Предложения

Ответы [ 2 ]

3 голосов
/ 13 января 2009

Было бы полезно, если бы вы упомянули вашу платформу и язык, но обычно это звучит так, как будто вы описываете Model-View-Controller .

Ваш объект (ы) "GUI" - это View. Здесь вы сохраняете всю логику рендеринга для вашего пользовательского интерфейса. Взаимодействия пользователей с представлением обрабатываются контроллером.

Контроллер представляет собой тонкий слой дескрипторов событий. Взаимодействие с пользователем вызывает методы на контроллере, который затем направляет их в модель.

Ваш объект (ы) без GUI - это Модель. Это объект, который содержит бизнес-логику и состояние которого в конечном итоге обновляется нажатием кнопок на вашем графическом интерфейсе.

Вы упоминаете "встраивание" ссылок между объектами. В этом нет необходимости, если события в вашем графическом интерфейсе могут быть перенаправлены каким-либо механизмом на ваш контроллер. Этот шаблон проектирования полезен, потому что он отделяет вашу логику пользовательского интерфейса от вашей бизнес-логики. Вы можете очень легко "привязать" новые виды, потому что между представлением и контроллером очень мало проводок событий.

Статья Википедии содержит дополнительную информацию и ссылки на примеры реализации.

0 голосов
/ 13 января 2009

Тратить немного времени на Соколиный Глаз (хотя это скорее Nethack, а не Rogue). Существует долгая история создания скинов для мошенников, таких как игры (или приложения для командной строки в целом), что не совсем классический mvc - у него уже есть полный пользовательский интерфейс, вместо этого вы добавляете декоратор к этому пользовательскому интерфейсу либо с прямым переводом, либо другая метафора (например, gparted, редактор разделов gnome, который позволяет создавать последовательности команд редактирования разделов путем прямого манипулирования)

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