有时我不知道某些方法属于哪些类。我究竟做错了什么?

时间:2016-07-28 02:05:33

标签: java c# class refactoring

假设有一个简单的游戏,我有一个名为Player的类,它拥有玩家可能拥有的所有信息,例如namexPositionyPositionwidthheight等。

Player类还有与之关联的方法,用于描述Player可以执行的操作,例如move()draw()

在游戏中,我需要知道Player何时与游戏中的任何其他对象发生碰撞,如墙壁,天花板或其他世界物体。

我可以通过两种方式解决这个问题:

创建类似CollisionDetecter的类,其类似detectCollision()的方法。在Player课程中加入此课程的实例,并在适当的时候调用detectCollision()方法

理由:

  • 检测碰撞并不是Player的内在属性,就像xPositionyPositionname一样,所以它不属于这个班。

  • Player课程中的混乱程度较低。 (这算了吗?)

detectCollision()课程中创建类似Player的方法,检查Player是否有任何内容

理由:

  • 检测碰撞是Player所做的事情,因此detectCollision()方法应该直接在Player类中。

  • 只有玩家需要能够检测到碰撞,那么我为什么要用一种方法创建另一个全班?为什么不将它作为Player类中的方法包含?

我觉得我总是在为这样的辩论而苦苦挣扎。

哪种方法最合适,为什么?这些都是坏的,我应该做些什么吗?

1 个答案:

答案 0 :(得分:2)

一般情况: -

有时候,最好在玩家类上开始,看看后果是什么。重构最终是你的朋友,如果你发现你正在编写的方法需要与Player无关的东西,那么你就开始设计一个新的设计了。

具体: -

也许Player是GameObject,而碰撞检测是一种通用概念,用于确定游戏对象之间的碰撞。

也许玩家不是真正的一个类,也许玩家只是一个带有运动策略的游戏对象,即玩家真的是由游戏的更基本方面组成。