【问题标题】:Struggling to refactor a Player class with more than 4000 LOC努力重构一个超过 4000 个 LOC 的 Player 类
【发布时间】:2011-07-11 00:59:35
【问题描述】:

情况如下: 我正在实现一个 4 人纸牌游戏。它有很多不同的规则,需要一些真正的智慧才能玩。于是我开始设计Card和Player等抽象类型以及它们之间的关系,然后我开始定义接口等等......

我正在努力重构的唯一类是 Player 类。我已经为这个类定义了一个简单的接口,它有 9 个方法(例如 play()、takeCard(Card) 等)所以我开始实现这些方法,然后问题就开始了......

我使用了很多逻辑和私有方法(例如 canCardEat()、dosTeamMateHaveCard(Card) 等)以使玩家尽可能聪明。当我写完该类的第一个工作版本时,该玩家在他的游戏中非常聪明,但是,我发现有超过 5000 行代码,并且恰好有 187 个私有方法,仅在这个类中! :(

我现在被这些数字吓坏了,所以我试图消除和合并一些私有方法,直到我总共达到 4500 个 LOC 和大约 160 个(私有)方法。仍然是一个庞大的班级。

我确实搜索了一个解决方案,但我得到的只是“将班级分成多个班级”。问题是我做不到。我想创建一个 LogicalBrain 类,并在 Player 类中使用它的一个实例作为实例变量,这样玩家实例就会要求逻辑大脑来完成这项工作。但是问题仍然存在,因为我必须将 Player 中大约 90% 的代码移动到新类中。

所以我的问题是:

  1. 如果你是我,你会如何重构 Player 类?
  2. 除了基于逻辑的代码和 ANN 之外,还有其他技术可以实现适合我情况的智能吗?

【问题讨论】:

  • 您的代码是否按原样工作?您需要这样做有什么真正的原因吗,还是现在只是镀金?
  • @Jim,是的,它运行良好。我之所以要重构,是为了让类尽可能易于理解。由于目前的方法数量庞大,我需要一段时间才能找到我需要的方法。有时我什至创建了一个重复的方法,因为我“忘记”了它已经存在。

标签: refactoring


【解决方案1】:

看看这个thread。如果您的代码是用 Java 编写的,那么有几个工具可以提供帮助。要寻找的一件事是相互使用的方法集群和属性的子集。这些集群可以用作新类的基础。

【讨论】:

  • 感谢 kc2001。我听从了你的建议,谢天谢地,我发现了许多方法可以收集卡片并返回一些结果。我现在要把他们搬到一个新班级。我会继续寻找更多这样的集群。谢谢。
猜你喜欢
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
  • 2012-07-07
  • 1970-01-01
  • 2018-03-05
  • 2022-11-15
  • 1970-01-01
相关资源
最近更新 更多