2010-09-12 2 views
2

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

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() 

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

ответ

5

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

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

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

+0

большое спасибо Mr.Martelli. +1 для уточнения –

+0

@Moayyad, добро пожаловать! –

+0

Это хороший ответ, но я бы сказал, что невозможно сказать вам, что «лучше», не видя весь ваш дизайн. – Falmarri

Смежные вопросы