MVC中有多少GUI逻辑?

时间:2011-09-20 17:06:11

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

我正在编写一个小型Java桌面应用程序,而我正在使用MVC模式。我已经读过如何在模型中保留逻辑,但是有些地方必须应用逻辑,但与GUI的运行方式完全相关。我还读到,图层应该设计为允许“可插拔”视图,这意味着如果您想将应用程序转换为命令行应用程序,您应该仍然能够以最小的麻烦使用相同的模型。

在我的应用中,图像显示在分割窗格的一个窗格中。还有一个复选框,用于确定在用户调整窗格大小时是否动态调整图像大小。我觉得我有两种可能的解决方案:

  1. 当用户点击复选框时,该值将存储在 模型。每次调整窗格大小时,都会验证该值 查看图像是否应缩放。

  2. 由于复选框仅与GUI的功能有关,我不会 麻烦存储模型中的值,我会验证 直接调整窗格大小的复选框。

  3. 这是一个有点低调的例子,但说明了我的问题。我在这里把逻辑分离到了极端吗?

4 个答案:

答案 0 :(得分:3)

对于MVC,“逻辑”可以分为三类:

  • 验证逻辑 - 这应该在模型中。
  • 业务/存储库逻辑 - 这应该在控制器中。
  • 显示和行为逻辑 - 这应该在视图中。

在你的例子中,听起来你现在处于行为逻辑(即视图)中。

答案 1 :(得分:1)

并非所有逻辑都应该与视图分开,但业务逻辑肯定应该是。

我也会将与UI相关的逻辑提取到单独的类中,但是对于Separation of Concerns

分离关注点的有效经验法则是问自己以下问题:“如果需求发生变化(涉及UI,验证等) - 那么我的应用程序的哪些部分/类别必须更改?”< / p>

答案 2 :(得分:1)

看看Presentation Model

演示模型

  

独立表示演示文稿的状态和行为   界面中使用的GUI控件

我多次遇到过这个问题。想象一下,你被要求做以下事情。

  如果当天是星期一,则必须出现

控件B

这是业务逻辑,不应该在View中。该观点不应该与这种逻辑有关。视图需要知道的是,是否必须显示某个控件。因此,为了实现这一点,您可以拥有一个具有视图所需的所有适当属性的类以及一个名为 isBVisible 的属性。该属性 isBVisible 可以从服务层填充,并返回视图所需的对象以显示数据。

答案 3 :(得分:0)

第一个是真正的MVC。第二个不是。正如kostja所说,MVC对于关注点分离特别重要。在较大的项目中,这对于跟踪正在发生的事情至关重要。在较小的项目中(一次性的,或者不会在生产环境中使用,或者是内部工具,或者其他什么),这不是一个问题。