JavaSwing:保持事件处理的可维护性
在我当前的项目中,我们为Swing客户端使用以下模式:
业务对象(POJO)<--&燃气轮机;(地图绘制)<--&燃气轮机;演示模型(支持属性更改的POJO)<--&燃气轮机;(有约束力)<--&燃气轮机;视图组件
一切都很好,按照我们期望的方式运作
但是,当视图开始增长时,我们会遇到这些问题:
- 许多事件被触发,导致级联事件。一个字段的一次更新可能会导致几十次后续的属性更新
- 当对话框复杂度增加时,侦听器的数量也会增加,代码开始变得凌乱和难以理解李>
在第一个答案后编辑:
- 如果值没有变化,我们不会触发事件李>
- 如果不需要侦听器,我们就不会添加它们李>
我们的屏幕上有非常复杂的规则,需要其他相关小组的通知。因此,我们有很多有用的侦听器,单个用户的更改可以触发许多底层事件
将表示模型与业务模型绑定的想法对我们来说并不太好:我们在映射过程中执行一些代码
我正在寻找关于构建可维护Swing应用程序的指南、建议、最佳实践等,特别是对于事件管理方面
# 1 楼答案
有许多方法可以减少发送的事件数
仅在您开始感兴趣时注册为事件侦听器,并在您不再感兴趣时取消注册。事实上,作为一个监听器,即使它不用于任何操作,也会迫使JVm调用用于事件传播的各种方法。不做监听器将避免所有这些调用,并使应用程序简单得多
所有这些都是非常简单的建议,只需要大量的讨论,以确保事件只在正确的时间和正确的听众被触发
# 2 楼答案
我建议每个模型采取单一事件行动。不要尝试将它分解为具有无望的
ProtpertyChangeListener
的字段。使用ChangeListener
或您自己的等效工具。(老实说,事件参数没有帮助。)可能将“属性”类型更改为可侦听对象,而不是侦听复合对象# 3 楼答案
大多数Swing组件使用的^{} 方案相当轻量级。在决定一个新的体系结构之前,一定要对代码进行概要分析。除了usual choices之外,这个
EventQueue
子类example还提出了另一种监视事件流量的有趣方法