我有一个Java项目,我正在尝试使用模型 - 视图 - 控制器设计。我拥有所有组成部分的骨干。我在决定如何将它们连接在一起时遇到了一些麻烦,尤其是视图和控制器。
我有一个名为 MainView 的类,它扩展了 JFrame 。我有各种其他类来帮助构成 MainView ,每个类都扩展了 JPanel 。例如,其中一个类称为 ParameterView 。我是否应该允许控制器查看每个“子视图”,或者我应该让控制器只看到 MainView 并通过那里管理所有内容?
与模型一样,模型应该通过一个总体类进行管理吗?
谢谢!
答案 0 :(得分:6)
在GUI(类似Swing)应用程序的上下文中,模型 - 视图 - 控制器比具体设计更具有模糊的建议。这种“模式”的变种数量是惊人的,并且没有一个你应该瞄准的“适当”变体。您可以选择任何似乎支持您当前需求的变体(随着您的应用的发展随时更改它)。
那就是说,这里有一些关于你所描述的情况的指示
答案 1 :(得分:1)
使用福勒的Presentation Model概念我们取得了很好的成绩。我强烈建议任何正在进行UI开发的人阅读Fowler对此领域中尝试过的各种方法的报道(GUI Architectures) - 这是一本精彩的读物,并且对每种方法的挑战和成功提供了很好的见解
答案 2 :(得分:0)
最好在层之间建立最小的耦合,所以我可能会允许控制器只看到MainView。您还应该考虑定义MainView实现的接口,以使MVC结构更清晰。控制器不应该真的需要知道它正在处理JFrame。
答案 3 :(得分:0)
暂时忽略MVC,只将特定于Swing的代码放入您构建的扩展JComponent的任何视图组件中。将其他所有内容委托给您可以在不使用Swing的情况下编译的类。使用接口来帮助您。您的Controller应该能够在不知道它们来自Swing事件的情况下处理请求。您的模型应该能够在不参考Swing * Model类的情况下更新系统的状态。您的View应该能够描述如何在不引用JComponent类的情况下向用户显示结果。完成后,您可以轻松构建委派给模型,视图和控制器的JComponent对象。
我希望能帮助你。
答案 4 :(得分:0)