Доступ к методам вложенных виджетов

1

Im работает над оптимизацией моего дизайна с точки зрения mvc, стремясь упростить api представления, которое вполне вложено, даже если Iv построил составные виджеты (с собственными событиями и/pubsub-сообщениями) в попытке упростить вещи.

Например, у меня есть класс верхнего уровня gui класса wxFrame, который имеет несколько виджетов, включая ноутбук, ноутбук содержит несколько вкладок, некоторые из которых представляют собой ноутбуки, содержащие составные виджеты. Поэтому для вызова методов одного из этих составных виджетов из контроллера я бы имел

 self.gui.nb.sub_nb.composite_widget.method()

Чтобы создать подходящую абстракцию для представления, я создал ссылки на эти виджеты (методы которых нужно вызывать в контроллере) в представлении так

 self.composite_widget = self.nb.sub_nb.composite_widget()

так что в контроллере теперь теперь упрощается вызов

 self.gui.composite_widget.method()

Является ли это приемлемым способом создания слоя абстракции для gui?

Теги:
model-view-controller
user-interface
oop
design-patterns

1 ответ

1
Лучший ответ

Ну, это определенно один из способов решения проблемы. Тем не менее я склонен использовать pubsub для вызова методов старомодным способом. Некоторым людям нравится pyDispatcher лучше, чем pubsub. Основная проблема с использованием метода многоточечного метода заключается в том, что его трудно отлаживать, если вам нужно изменить имя метода.

  • 0
    Что вы имеете в виду, используя «pubsub для вызова методов старомодным способом», подразумеваете ли вы, что вы вызываете метод в вашем графическом интерфейсе, когда ваш контроллер или что-либо получает сообщение от ...? Большинство методов времени, которые мне нужно вызывать, являются установщиками, скажем, для установки начального значения виджета на основе конфигурации. Если значение виджета изменяется пользователем, тогда я в основном использую pubsub для трансляции этого значения, поэтому я обычно не нужно звонить добытчикам .. хотя иногда я и звоню.
  • 1
    Да, это то, что я имел в виду. Одна программа у меня проверяет наличие обновлений в моем почтовом ящике каждые пару минут. Чтобы обновить мою программу, я могу вызвать метод напрямую, или я могу быть ленивым и использовать pubsub. В этом случае я почти всегда использую pubsub, чтобы сообщить, что получил электронное письмо. Получатель в моих основных программах видит сообщение и воздействует на него, обновляя мой пользовательский интерфейс и открывая окно сообщения, чтобы сообщить мне. Я прошу прощения за то, что не был яснее.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню