какая из этих реализаций Python лучше - PullRequest
2 голосов
/ 13 сентября 2010

какой из следующих вариантов считается лучшим дизайном и почему? У меня есть 2 класса, один для компонентов графического интерфейса, а другой для его событий.
пожалуйста, имейте в виду, что eventClass будет реализован очень много раз (иногда для получения данных из баз данных Oracle и иногда баз данных MySQL)

class MainWindow:

    def __init__(self):
        self.myEvents = eventClass()  # the class that has all the events 
        self.button = button # consider it a button from any gui library
        self.menu  = menu  # menu box 

    def bottonEvent(self):
        data = self.myEvents.buttonEvent()
        self.menu.populate(data)

class eventClass:

    def __init__(self):
          pass
    def getData(self):
         return data # return data to puplate in the list

ИЛИ

class MainWindow:

    def __init__(self):
        self.myEvents = eventClass(self)  # the class that has all the events 
        self.button = button # consider it a button from any gui library
        self.menu  = menu  # menu box 

    def bottonEvent(self):
        self.myEvents.ButtonEvent()

class eventClass:

    def __init__(self,window):
          pass
    def ButtonEvent(self):
         window.menu.populateData()

пожалуйста, сообщите мне, если что-то было неясно
пожалуйста помогите,
заранее спасибо

1 Ответ

5 голосов
/ 13 сентября 2010

Первый вариант лучше «разъединить»: класс событий нуждается и не имеет никаких знаний об объекте окна или его атрибуте меню - отличный подход, который делает класс событий особенно простым для модульного тестирования в изоляции без каких-либо накладных расходов.,Это особенно хорошо, если существует много реализаций одного и того же интерфейса, как вы упомянули, что они существуют в вашем случае.

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

Итак, я бы порекомендовал первую форму.

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