Java 在下列情况下是否适当地授权责任?

Java 在下列情况下是否适当地授权责任?,java,tdd,separation-of-concerns,Java,Tdd,Separation Of Concerns,我对TDD设计相对较新,我正在从事一个项目以获得经验。我的项目是一个塔防风格的游戏-我从一个基本的爬行(怪物)开始,并根据测试的行为设计它。然而,蠕变如何移动是一个相当复杂的方法。它目前看起来大致如下: public void moveToward(Point2D destination) { if (canMove()) { if (speedGreaterThanDistance(destination) { leftoverDistance = calculateL

我对TDD设计相对较新,我正在从事一个项目以获得经验。我的项目是一个塔防风格的游戏-我从一个基本的爬行(怪物)开始,并根据测试的行为设计它。然而,蠕变如何移动是一个相当复杂的方法。它目前看起来大致如下:

public void moveToward(Point2D destination) {
  if (canMove()) {
    if (speedGreaterThanDistance(destination) {
      leftoverDistance = calculateLevtoverDistance(destination);
      currentLocation.setLocation(destination);
    } else {
      // do math to calculate x distance and y distance to move
      Point2D newLocation = new Point2D.Double(oldX + xTrans, oldY + yTrans);
      currentLocation.setLocation(newLocation);
    }
  }
}
这确实让人感觉不到正确的设计和结构,但我不确定如何将其分割开来。有没有人有任何建议或链接来告诉我如何去做这件事?我的设计有一个爬行对象作为我的业务逻辑的一部分,所以我知道它必须至少有点复杂,但它只是看起来我现在没有它的权利。我的部分问题可能是我没有适当的值对象吗


谢谢,

如果我正确理解您的问题,您有一个带有当前位置(点2D)、方向(向量xTrans、yTrans)和目的地(点2D)的爬行

据我所知,蠕变行为是:

  • 当爬行不能移动时,转弯后的当前位置应保持不变
  • 当爬行可以移动且当前位置和目的地之间的距离小于方向的标准值时,转弯后的当前位置应为目的地
  • 当蠕变可以移动且CurrentPosition和Destination之间的距离严格大于方向的标准值时,转弯后CurrentPosition应为CurrentPosition+方向
从这个角度来看,我倾向于将计算/几何体部分提取到一个几何体类中,并将蠕变行为声明为

public void moveToward(Point2D destination) 
{
  if (CanMove()) 
  { 
    var distanceToDestination = Geometry.Distance(CurrentPosition, destination);
    var distancePerTurn = Geometry.Length(Direction);
    if (distanceToDestination <= distancePerTurn)
    {
      CurrentPosition = destination;
    }
    else
    {
      CurrentPosition = Geometry.Add(CurrentPosition, Direction);
    }   
  }
}
public void移动方向(Point2D目标)
{
if(CanMove())
{ 
var distanceToDestination=几何体距离(当前位置,目标);
var distancePerTurn=几何体长度(方向);

如果(距离目标)您确实正确理解我的问题:我会考虑你所说的,并看到实施它。如果我喜欢它,我会向你提供答案。在那之前,希望有更多的建议出现。^。谢谢你的输入。我一直在思考这个方法。我看到你的建议,我会把一些工作重新整理成一堆静态的帮助类。方法(如长度)为我做一些其他的工作。我不确定这比在我的类中使用私有helper方法为我做这件事有什么好处。请你再解释一下好吗?我在这里看到了两个相关的论点。首先,游戏的其他元素可能会使用相同类型的逻辑;然后,可以说,是爬行是它的责任,但相关的计算不是:到目的地的距离听起来不像是爬行的工作。我倾向于使用静态辅助工具进行几何计算,但你也可能最终得到一个非静态的Board类或类似的东西,它将拥有位置和处理距离。嗯……first参数是一个很好的论点。我将有其他物体也将移动(即投射物)因此,有一个助手类来处理这些计算将是一个很好的分离。就我一直在观看的谷歌技术讲座而言,他们说单例很难测试-然而,由于这将只是一个带有静态方法的助手类(而不是单例),它对TDD应该很简单,对吗?