我对TDD设计比较陌生,正在开展一个项目以获得经验。我的项目是塔防风格游戏 - 我开始使用基本的Creep(怪物)并根据经过测试的行为进行设计。然而,蠕变如何移动是一种相当复杂的方法。它目前看起来像是:
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);
}
}
}
这真的不像正确的设计和结构,但我不确定如何分割它。有没有人有任何建议或链接指向我如何去做这个?我的设计有一个Creep对象作为我的业务逻辑的一部分,所以我知道它必须至少有点复杂,但它似乎并不像我现在正确。部分问题可能是我没有适当的价值对象吗?
谢谢,
答案 0 :(得分:1)
如果我正确理解你的问题,你有一个带有CurrentPosition(一个Point2D)的Creep,一个Direction(一个Vector xTrans,yTrans)和一个Destination(一个Point2D)。
据我所知,Creep的行为是:
从这个角度来看,我倾向于将计算/几何部分提取到Geometry类中,并将Creep行为说明为
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);
}
}
}
您现在可以在Geometry类上测试方法,并且Creep的3个行为也应该是可测试的。