java - 正确的模型- View - Controller 设计

标签 java model-view-controller user-interface swing

我有一个 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/

相关文章:

java - 当用户使用应用程序时,MySQL断开连接时,如何返回自定义错误页面?

Java/JAXB : Unmarshall XML elements with same name but different attribute values to different class members

javascript - Backbone : Collection not rendered in View even though it's fetched

android - 在 Jetpack Compose 中使图像超出边界

wpf - 将 View 拆分为两个单独的 View

validation - JSF2 BeanValidation 失败后重置值

java - java中的数组问题

Java 使用 setText 获得 int 值

objective-c - 用户输入如何适应 Apple 的 MVC 模式?

c# - 如何在下拉列表mvc中设置选定的值