Считается ли плохой практикой использовать атрибут title виджета для ссылки на него? - PullRequest
2 голосов
/ 29 июля 2010

Будет ли плохой практикой использовать атрибут title виджета для ссылки на него?

Например, у меня есть несколько пользовательских radioBoxCtrls на panel Мне только нужно получить / установить все значения одновременно поэтому класс контейнера (панель) для объектов radioBoxCtrls имеет следующие методы

get_options()
set_options()

Для установки параметров для всех radioBoxCtrls a dictionary передается методу set_options(). Каждая пара key, value в словаре представляет собой title из radioBoxCtrl и title из button в radioBoxCtrl, который должен быть установлен

  def set_options(self, options={}):
        """
        This method sets which radio button is selected 
        on each RadioBoxCtrl object
        @param options: A dictionary  
                        Each key is the title of a RadioBoxCtrl 
                        each keys value is the button on the radio box that is to be selected
        """
        for option_box in self.option_boxes:
            if option_box.title in options.keys()
                option_box.set_selected_button(options[option_box.title])

    def get_options(self):
        """
        This method returns a dictionary of the selected options 
        Each key is the title of a RadioBoxCtrl object
        and each keys value is the name of the button selected on the radio box
        """
        options = defaultdict(list)
        for option_box in self.option_boxes:
            options[option_box.title]=option_box.get_selected_btn()
        return options

Так (в попытке очистить), когда я вызываю метод set из моего контроллера Я перехожу в словаре так:

options = {"Name of radioBoxCtrl": "Option 2", ... }
self.gui.optionsPanel.set_options(options)

Какого черта ты хочешь это сделать? (спросите вы)

Краткий ответ : mvc

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

Я думал, что было бы проще, если бы я мог просто вызвать один метод для установки и наоборот -но я сейчас не уверен!


Я понимаю, что это, вероятно, больше вопрос о приемлемости ссылки на объекты с помощью некоторого строкового атрибута, которым они обладают, который в моем случае просто является заголовком ... так что не стесняйтесь ответить на него соответствующим образом ...

Пожалуйста, не стесняйтесь улучшать заголовок вопроса (я не совсем уверен, как его сформулировать) и добавлять теги.

Спасибо

1 Ответ

2 голосов
/ 29 июля 2010

Я не могу сказать, назовут ли гуру это плохой практикой.Я просто знаю, что никогда этого не сделаю - это медленнее, более подвержено ошибкам, возможно, делает очень трудным изменение названия заголовка (правда, только если вы везде его жестко закодируете) и (возможно) очень не элегантно. По крайней мере вы должны связать опции с идентификатором виджета, который по-прежнему пахнет imho, но, по крайней мере, имеет меньше проблем.Может быть, всю эту часть приложения следует реорганизовать, чтобы она была менее централизованной, чтобы проблема полностью исчезла.

Редактирование способа рефакторинга: Честно говоря, я не могу сказать - я мало знаю о приложении.Очевидный подход заключается в создании подклассов всех виджетов и возложении их на то, чтобы каким-то образом получить параметры и соответственно изменить их.Но я не могу сказать, действительно ли это возможно.

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