繁体   English   中英

拒绝为所有组件使用单个ActionListener?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM