4

对于路由操作请求,我想为所有组件使用单个 ActionListener 实例。可以使用 setActionCommand 区分对 actionPerformed 的调用。

这是建议吗?在 MVC 上下文中这种方法是否有任何潜在的缺点?

4

3 回答 3

6

MVC 只要求拆分 M、V 和 C。但它并不要求关系具有某种基数。所以你可以自由了。

如果事件处理方法中的切换逻辑变得过于复杂(比如多于几行),您可能需要考虑将一个巨大的类拆分为多个类。提供更好的概览和维护。相信我:如果你回到一个简单的 Listener 来改变它,你会非常高兴。这将是一次重构;您的 IDE 可能会提供相应的支持。

所以我的建议是:KISS——先做简单的事情,然后把你的东西放在一个 Listener 中。如果它变得太复杂:再次使其简单并重构为多个侦听器(这将是 KISS 的另一个应用程序)。

只要记住保持代码简单,不要懒惰地创建类。创建一个类比让你回到复杂的代码更简单。永远记住:创建软件是 20%,维护是 80%。现在让代码简单易懂,以后维护也很简单。反之亦然。

于 2012-08-10T05:32:30.973 回答
5

这是建议吗? ”我想不会,但很大程度上取决于您项目的规模。

我认为“一个篮子里的所有鸡蛋”这句话浮现在脑海中。

当您向其添加新的操作分支时,语句的大小if可能会变得难以想象。随着您的项目复杂性增加,您的操作处理程序也会增加。

调试潜在问题也可能成为头疼的问题。

代码的维护会变得乏味且容易产生误解,并导致逻辑中不断出现新的错误。

您打破了责任隔离规则(您应该尝试将管理操作/事件的责任隔离在它自己的对象/类中)

如果您正在寻找一种重用操作处理程序的方法,请查看操作API。如果你真的很渴望,你可以使用工厂在你的代码中产生众所周知的动作。这将允许重用,同时保持责任隔离。

就个人而言,在过去的 3 年中,不得不花费过去 3 年的时间来解开一个没有经验的毕业生的烂摊子,他为我们的系统编写了核心库并喜欢这样编码,请不要这样做。它很容易破解,很难阅读,而且只是一团糟。

恕我直言,它谈到缺乏/或无法设计。

这只是我个人的看法,基于我的经验

于 2012-08-10T05:20:19.677 回答
2
  • 最复杂的方法是添加EventHandler,触发事件,这个/这些事件可以在字符串值中进行比较

  • 优势我不知道任何方式(忘记了Reflection)如何将String值作为参数传递Java Classes

  • 缺点(我的观点)需要最深入的知识,与Reflection

  • 可以提到下一个最佳选择Swing Action,很棒且可扩展,必须检查方法以isXxx

  • 对于 MVC 来说,使用ProprertyChangeXxx通过 Swing 方法构建代码和分发事件是更好和正确的方法

  • 使用JTextComponentsTextAction不是ProprertyChangeXxx(也许我错了,也许是错误的概念,没有什么给我更好的选择)

于 2012-08-10T07:55:32.207 回答