我正在编写一个小型Java桌面应用程序,而我正在使用MVC模式。我已经读过如何在模型中保留逻辑,但是有些地方必须应用逻辑,但与GUI的运行方式完全相关。我还读到,图层应该设计为允许“可插拔”视图,这意味着如果您想将应用程序转换为命令行应用程序,您应该仍然能够以最小的麻烦使用相同的模型。
在我的应用中,图像显示在分割窗格的一个窗格中。还有一个复选框,用于确定在用户调整窗格大小时是否动态调整图像大小。我觉得我有两种可能的解决方案:
当用户点击复选框时,该值将存储在 模型。每次调整窗格大小时,都会验证该值 查看图像是否应缩放。
由于复选框仅与GUI的功能有关,我不会 麻烦存储模型中的值,我会验证 直接调整窗格大小的复选框。
这是一个有点低调的例子,但说明了我的问题。我在这里把逻辑分离到了极端吗?
答案 0 :(得分:3)
在你的例子中,听起来你现在处于行为逻辑(即视图)中。
答案 1 :(得分:1)
并非所有逻辑都应该与视图分开,但业务逻辑肯定应该是。
我也会将与UI相关的逻辑提取到单独的类中,但是对于Separation of Concerns。
分离关注点的有效经验法则是问自己以下问题:“如果需求发生变化(涉及UI,验证等) - 那么我的应用程序的哪些部分/类别必须更改?”< / p>
答案 2 :(得分:1)
演示模型:
独立表示演示文稿的状态和行为 界面中使用的GUI控件
我多次遇到过这个问题。想象一下,你被要求做以下事情。
如果当天是星期一,则必须出现控件B 。
这是业务逻辑,不应该在View中。该观点不应该与这种逻辑有关。视图需要知道的是,是否必须显示某个控件。因此,为了实现这一点,您可以拥有一个具有视图所需的所有适当属性的类以及一个名为 isBVisible 的属性。该属性 isBVisible 可以从服务层填充,并返回视图所需的对象以显示数据。
答案 3 :(得分:0)
第一个是真正的MVC。第二个不是。正如kostja所说,MVC对于关注点分离特别重要。在较大的项目中,这对于跟踪正在发生的事情至关重要。在较小的项目中(一次性的,或者不会在生产环境中使用,或者是内部工具,或者其他什么),这不是一个问题。