桌面应用程序中的MVC和Swing

时间:2013-04-18 00:12:00

标签: java swing model-view-controller design-patterns

在意识到我完全忽略了MVC模式后,我试图在具有Swing视图的应用程序中使用该概念。我现在已经阅读了关于MVC主题的大部分帖子,但仍然有点困惑,因为它对我来说太复杂了,我想我需要一些基本的澄清,所以我不会出错路径。

我也想知道在实际项目中使用MVC是多么常见。许多在线教程似乎忽略了控制器并将其与模型混合在一起,而我对XSTL的业务逻辑功能感到困惑。为什么要从JSP视图中寻址数据源?

除了这些想法之外,我的正确问题是:

如果你有一个Swing组件,那么该Swing类中的事件监听器是否应该通过在POJO控制器类中调用(可能是静态的?)方法来更新组件状态,而POJO控制器类又从模型中获取相应的业务逻辑。 POJO类层次结构和相关的持久性?

2 个答案:

答案 0 :(得分:10)

我作为自由职业者工作了很长时间,几乎90%的项目都是关于Java Swing(桌面应用程序)。还有很多项目涉及从Visual Fox Pro等语言迁移到Java,这很痛苦,因为困难的部分不是在已经完成的逻辑中思考,困难的部分是把代码弄得乱七八糟地把它转过来根据良好实践和使用设计模式制作好看的代码,这就是为什么在脑海中制作模式或地图如何根据模型,视图,控制器的概念分离代码的好主意。

上面提到的MVC可以帮助您拥有一个外观漂亮,易于维护且易于阅读的代码,并且您可以遵循编程范例和良好实践。

视图:显然,在Swing的情况下,与用户(用户界面)交互的部分,您的窗口,框架,面板以及涉及您的应用所需的图形组件的所有代码。

控制器:涉及您为应用程序建立的核心或业务逻辑,在这个“层”中,您应该包括功能和“我的应用程序将如何实现目标?”。

模型:与您管理的数据相关,例如,您的实体和类,它们代表您要管理或提供维护的数据。

应用MVC并不是那么难,但正如我所提到的,当您必须将代码从非应用MVC结构迁移到MVC结构化应用程序时,有时可能会很痛苦。使用MVC开始编码更容易。

我习惯的方法是使用maven并将我的应用程序分成小的“模块”,当然,你不需要maven,我发现它在那一刻很有用,但无论如何你可以试试通过将应用程序分成小项目来练习或习惯MVC,例如:

Java Project 1:应用程序数据模型(包含与数据管理相关的所有代码:实体,dtos,bean,daos)

Java Project 2:application-core-controller(包含所有业务逻辑和功能,如果您希望在与视图相关时使代码更“透明”,可以在此使用外观模式)

Java Project 3:application-view-ui(包含所有面板,框架和图形组件)

以这种方式工作帮助我(并强迫我)习惯于分离我的代码,并密切关注我正在进行的项目真正重要的事情。例如,如果我在应用程序数据模型上,我专注于数据模型,我不会考虑业务逻辑或图形界面。

很长的解释,也许有人可以做得更好,但希望我能帮助你或至少帮助你。

最好的问候。

答案 1 :(得分:3)

填写基本了解MVC的URL

http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller

现在在Swing应用程序中实现它的方法。不要将控制器功能与侦听器功能混淆。

  1. 应在视图类中定义附加到它们的UI控件和侦听器。
  2. 在任何情况下,无论何时需要调用业务逻辑,都需要调用控制器类。就像从数据库中获取一些值一样。
  3. 控制器类应与您的模型通信以获取数据并在需要时对其进行操作。
  4. 模型类应该处理数据。
  5. 使用MVC的想法是减少冗余代码和更易于管理的代码。因此,如果您正在进行一些计算/操作,那么可以将这些计算/操作移动到控制器。可以从需要相同内容的不同视图调用控制器。多个控制器可以使用类似的模型来获取数据。