Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
哪些python实现更好_Python_Oop - Fatal编程技术网

哪些python实现更好

哪些python实现更好,python,oop,Python,Oop,以下哪一项被认为是更好的设计?为什么?。 我有两个类,一个用于gui组件,另一个用于它的事件。 请记住,eventClass将被多次实现(有时是从oracle数据库获取数据,有时是从mysql数据库获取数据) 或 如果有任何不清楚的地方,请通知我 请帮忙, 提前感谢第一个选择是更好的“解耦”:事件类需要并且完全不了解窗口对象或其菜单属性——这是一种非常好的方法,可以使事件类特别容易地单独进行单元测试,而无需任何开销。如果需要存在同一接口的多个实现,这尤其好,正如您在案例中提到的那样 第二种选择

以下哪一项被认为是更好的设计?为什么?。 我有两个类,一个用于gui组件,另一个用于它的事件。
请记住,eventClass将被多次实现(有时是从oracle数据库获取数据,有时是从mysql数据库获取数据)

如果有任何不清楚的地方,请通知我
请帮忙,

提前感谢

第一个选择是更好的“解耦”:事件类需要并且完全不了解窗口对象或其菜单属性——这是一种非常好的方法,可以使事件类特别容易地单独进行单元测试,而无需任何开销。如果需要存在同一接口的多个实现,这尤其好,正如您在案例中提到的那样

第二种选择引入了相互依赖性——没有窗口对象,事件对象无法工作,窗口对象构建事件对象。这可能是一个可以接受的复杂情况,在更深奥的情况下,它买你的东西,但对于这个具体的用途,它听起来更像是一个武断的额外困难,没有任何真正的好处


因此,我推荐第一种形式。

这是一个很好的答案,但我要说的是,如果不看到你的整个过程,就不可能告诉你哪个“更好”design@Falmarri当然,这是一个很好的观点:如果OP隐藏了其他地方发生的一些可怕的并发症,但与这两个类密切相关,那么,总体设计将不符合我的“此特定用途”资格(因为用途将非常不同;-)。我的A是基于应用程序的壁橱中没有隐藏任何大秘密或骨架;-)。
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()