pep*_*ero 5 python oop user-interface wxwidgets design-patterns
伙计们,我正在编写一个应用程序的GUI,一个插入cd的cd容器,目前我不是很清楚,我想我需要一些帮助来澄清我对面向对象设计的理解.
所以,首先,我使用观察者模式来构建抽象的Model和View类,以及具体模型(cd容器)和具体视图(cd容器视图).然后我开始使用wxwidget框架设计和图形外观或布局(CDContainerWidget,来自wxPanel)为cd容器和其他gui控件MainFrame(来自wxFrame)等.
所以现在我有三个类:CDContainerModel(cd容器),CDContainerView(观察者模式的类)和CDContainerWidget(gui控件).然后我不清楚我应该怎么做CDContainerView和CDContainerWidget?
我认为CDContainerWidget和CDContainerView都需要CDContainerModel.我想了四种方法,但不知道哪一种是合适的:
1).将CDContainerWidget作为成员变量关联到CDContainerView中,然后将CDContainerView作为成员变量放入主框架中.
class CDContainerView:
  def __init__:
     self.gui=CDContainerWidget
class MainFrame:
  def __init__:
     CDContainerView
2).CDContainerView子类CDContainerWidget:
class CDContainerView(CDContainerWidget):
class MainFrame:
   def __init__:
     CDContainerView
3).CDContainerWidget子类CDContainerView:
class CDContainerWidget(CDContainerView):
class MainFrame:
  def __init__:
     CDContainerWidget
4).而不是使用CDContainerWidget和CDContainerView,只使用单个类CDContainerBig,它是抽象类View和wxPanel的子类
class CDContainerBig(View, wxPanel)
我的问题是什么是正确的解决方案?我已经阅读了MVC模式的维基页面,但我并不真正理解它的描述,也不知道如何并且也不知道将它应用于我的问题是否合适.
好吧,我补充一些评论.最初,当我开始设计编程时,我没有多想,只是选择,2)方法.但现在,我认为3)是好的.因为将widget放在widget中是合理的(CDContainerWidget放入MainFrame).但我不太确定.此外,它似乎与观察者模式,三个类扭曲和awkard.有时,在我看来,这4个可能是相同的,只包括谁或谁向谁发送信息.好吧,我想我真的需要澄清这一点.
另外,我赞成3)因为实用点.CDContainerWidget实际上包含几个子窗口小部件组件(按钮,输入框等),如果我们通过子组件小部件改变设置新值,那么对于1),我们需要CDContainerWidget来了解CDContainerView,让CDContainerView通知其他视图.2)更糟糕的是,CDContainerWidget必须知道它的儿童CDContainerView.3)CDContainerWidget本身就是CDContainerView,所以非常合理.4)好,容易,但没有逻辑分离.这是我自己的想法,不知道是不是正确的.
谢谢!!