[英]Downsides to using a single ActionListener for all Components?
对于路由操作请求,我想为所有组件使用单个ActionListener实例。 可以使用setActionCommand区分对actionPerformed的调用。
这是建议吗? 在MVC环境中,这种方法是否有任何潜在的缺点?
MVC只要求分割M,V和C.但它并没有要求某种关系的基数。 所以你可以自由地去。
如果事件处理方法中的switch逻辑变得太复杂(比如几行),你可能想要考虑将一个巨大的类拆分成多个类。 提供更好的概述和维护。 相信我:如果你回到一个简单的听众来改变它,你会非常高兴。 那将是一个重构 ; 您的IDE可能会提供相应的支持。
所以我的建议是:KISS - 首先把你的东西放在一个听众中。 如果它变得太复杂:再次使它变得简单并重构为多个Listeners(这将是KISS的另一个应用程序)。
只记得保持代码简单,不要懒惰创建类。 创建一个类比回到复杂的代码更简单。 永远记住:创建软件是20%,维护是80%。 使代码现在易于理解,以后维护将变得简单。 相反的情况也适用。
“ 这是建议的吗? ”我想不到,但很多将取决于你的项目规模。
我想起了“把你所有的鸡蛋放在一个篮子里”的说法。
当你向它添加新的动作分支时, if
语句的大小可能变得难以想象。 当您的项目复杂性增加时,您将采取行动处理程序。
调试潜在问题也可能成为头痛的问题。
代码的维护将变得乏味且容易产生误解,并且不会导致逻辑中出现新的错误。
你打破了责任分离规则(你应该尝试分离责任,管理自己的对象/类中的一个动作/事件)
如果您正在寻找重用动作处理程序的方法,请查看Action API。 如果您真的很渴望,可以使用工厂通过代码生成熟知的操作。 这样可以在保持责任隔离的同时重复使用。
从个人的角度来说,不得不花费最近3年的时间来解开一个缺乏经验的毕业生的混乱,他们将核心库写入我们的系统并且喜欢这样的代码,请不要。 这很容易打破,很难阅读,只是一个简单的混乱。
恕我直言,它说缺乏/或无法设计。
根据我的经验,这只是我的个人意见
最复杂的方法是添加EventHandler ,它触发了事件,这个/这些事件可以在String值中进行比较
优势我不知道任何方式(忘了Reflection
)如何通过String
值作为参数,通过Java Classes
缺点(我的观点)需要最深的知识,与Reflection
接下来最好的选择可以提到Swing Action
,很棒且可扩展,必须检查以isXxx
开头的方法
MVC是使用ProprertyChangeXxx构建代码和通过Swing方法分发事件的更好和正确的方法
对于JTextComponents
使用TextAction
而不是ProprertyChangeXxx
(也许我错了,也许是错误的概念,没有什么能给我更好的选择)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.