我有一个 Java 项目,我正在尝试使用模型- View - Controller 设计来实现它。我已经建立了所有组件的 Backbone 。我在决定如何将它们连接在一起时遇到了一些麻烦,尤其是 View 和 Controller 。
我有一个名为 MainView 的类,它扩展了 JFrame。我还有其他各种有助于构成 MainView 的类,每个类都扩展了 JPanel。例如,其中一个类称为 ParameterView。我应该允许 Controller 查看这些“ subview ”中的每一个,还是应该让 Controller 只看到 MainView 并通过那里管理所有内容?
与模型一样,是否应该通过一个总体类来管理模型?
谢谢!
最佳答案
在 GUI(类似 Swing)应用程序的上下文中,模型- View - Controller 更像是一个模糊的建议,而不是具体的设计。这种“模式”的变体数量惊人,没有一个你应该瞄准的“合适”变体。您可以选择似乎支持您当前需求的任一变体(并随着您的应用的发展随时更改它)。
也就是说,这里有一些关于您所描述情况的提示
- 您可以使用发布/订阅机制(又名:观察者模式)或责任链模式将模型(或其部分)与 View 的不同部分分离。
- 包装 View 所有部分的外观类 (MainView) 似乎是“神类”的配方:应用程序中几乎所有更改都需要更改的类(反模式)。通过公开 View 的不同部分,您将能够更轻松地在新上下文中重用它们。
- 最后,通过子类化 Swing 组件来实现模型似乎不是一个好主意。这样的设计很难测试,这意味着它也非常严格。更喜欢委托(delegate)而不是继承。或者正如 JBrains 所说:“停止子类化,否则小猫会得到它”。仅将继承用于覆盖 Swing 方法。立即将所有逻辑委托(delegate)给与 Swing 完全隔离的对象。这将促进可测试性和 future 的灵 active 。
关于java - 正确的模型- View - Controller 设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2389735/