Java Swing GUI设计技巧:用户操作验证(MVC-FSM)

5
我已经使用Swing实现了GUI并尝试尽可能地遵循MVC模式。
不过我也在想,MVC并不是谜题的全部。
FSM在GUI设计中也会使用吗?
我从没有在GUI中使用过FSM,我的方法是:在动作上调用控制器的相应方法来更新模型,最后更新视图。
通常,在用户请求触发时,我使用一些简单的检查来确保用户应该能够执行这种操作:特定组件是否启用?或者该标签是否可见?等等。
到目前为止,这似乎有效,但我必须承认我很“幸运”,没有建立过太复杂、精细或繁琐的GUI。
我以前构建过FSM(在不同类型的应用程序中-主要是C++),我开始思考FSM在GUI中是否实际上被用作一种模式,我的方法即通过对ActionListeners代码进行检查,查看用户所看到的内容以及哪些组件已启用或禁用等等,决定用户是否应该看到一些错误消息而不是能够执行特定的操作(例如按钮承诺的操作)对于完整的GUI应用程序来说实际上不是一个好主意。
因此,在设计GUI时,除了如何实现MVC之外,您是否将FSM与您的设计结合使用?
更新:
在查看Dhruv Gairola在他的评论中的文章后,我仍然感到困惑。
文章提到构建FSM,尽管实际上是绑定到计算器实现上的,这意味着即使计算器是通过命令行获取用户输入而不是通过GUI实现的,仍然需要FSM。
我仍然不确定在每个时间点验证用户操作的FSM是否是一种流行或有效的设计。
这似乎可能会耗费太多精力,并要求GUI已经完全预先设定,并且所有可能的用户操作都已映射到特定状态取决于特定结果。
鉴于目前还没有任何评论只有一个回复,我倾向于认为验证控件上用户操作的FSM实际上并未被使用。
如果您对此有任何意见或建议,欢迎发表。谢谢。
1个回答

2
让我们这样说,设计模式主要是对不同的设计原则进行阐述,例如封装变化、按接口而非实现编程等。因此,并不是必须使用某种设计模式,基本上确保你编写程序的方式符合良好的设计原则即可。如果在特定设计中使用有限状态机(FSM)是有意义的,我建议你采用它。通常鼓励使用模式,以便其他程序员能够理解你的逻辑并根据他们对模式的了解轻松扩展它。没有严格的规定说你必须使用MVC或者其他什么的。结论是:只要应用的模式符合良好的设计原则(即使你没有使用特定的模式),确保其设计良好并足够易于他人扩展和理解即可。这是我的个人看法。

你说得有道理,但是有些情况下,特定的设计模式被普遍认为是唯一可行的方式。例如,在桌面/网络应用程序中,MVC是UI的主流方法,我不认为有人会反对这种方法。因此,我想知道在特定实例中验证用户可以或不能做什么,是否通常与FSM相关联。 - Cratylus
我看过类似 http://cnx.org/content/m17257/latest/ 这样的有限状态机使用,但我理解你的担忧。也许 https://dev59.com/tnI-5IYBdhLWcg3w483k 可以帮你解决疑惑。嗯,好问题。 - Dhruv Gairola
这是一篇很棒的文章!我非常喜欢GUI编程,而FSM对我来说就像一个缺失的部分!我总是有一种模糊的感觉,在整个Swing、BeansBinding、MVC、Validation的群体中缺少了某些东西。它们都涉及GUI编程非常重要的方面,但FSM让它更加完整。谢谢你为我们普及了它! - Rekin
在阅读了您评论中提到的文章后,我仍然对此感到困惑。该文章提到构建一个FSM,实际上是绑定到计算器实现上的,这意味着即使计算器是通过命令行而不是GUI获取用户输入,仍然需要FSM。 - Cratylus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接