适当的模型 - 视图 - 控制器设计

Rya*_*yan 2 java model-view-controller user-interface swing

我有一个Java项目,我正在尝试使用模型 - 视图 - 控制器设计.我拥有所有组成部分的骨干.我在决定如何将它们连接在一起时遇到一些麻烦,尤其是视图和控制器.

我有一个名为MainView的类,它扩展了JFrame.我有各种其他类来帮助组成MainView,每个类都扩展了JPanel.作为示例,这些类之一称为ParameterView.我是否应该允许控制器查看每个"子视图",或者我应该让控制器只看到MainView并通过那里管理所有内容?

与模型一样,模型是否应该通过一个总体类来管理?

谢谢!

Ita*_*man 6

在GUI(类似Swing)应用程序的上下文中,模型 - 视图 - 控制器更像是一个模糊的建议而不是具体的设计.这种"模式"的变种数量是惊人的,并且没有一个你应该瞄准的"适当"变体.您可以选择任何似乎支持您当前需求的变体(随着您的应用的发展随时更改它).

也就是说,这里有一些关于你所描述情况的指示

  • 您可以使用发布/订阅机制(AKA:观察者模式)或责任链模式来将模型(或其部分)与视图的不同部分分离.
  • 打包视图的所有部分的外观类(MainView)似乎是"上帝类"的配方:需要在应用程序中几乎任何更改(反模式)进行更改的类.通过公开视图的不同部分,您将能够更轻松地在新的上下文中重用它们.
  • 最后,通过子类化Swing组件来实现模型似乎不是一个好主意.这样的设计很难测试,这意味着它也非常坚硬.更喜欢委托而不是继承.或者正如JBrains所说:"停止继承,或小猫得到它".使用继承只是为了覆盖Swing方法.立即将所有逻辑委托给与Swing完全隔离的对象.这将促进可测试性和未来的灵活性.