Я относительно новичок в дизайне 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 как часть моей бизнес-логики, поэтому я знаю, что он должен быть, по крайней мере, несколько сложным, но это просто не похоже, что у меня все в порядке. Могла ли моя проблема состоять в том, что у меня нет подходящих объектов ценности?
Спасибо,
Вы правильно поняли мою проблему. :) Я рассмотрю, что вы сказали, и посмотрите, как это реализовать. Если мне это понравится, я отдам тебе ответ. До тех пор - надеюсь, появятся новые предложения. ^.^Спасибо за вход. :) –
Я думал об этом подходе. Как я вижу ваше предложение, я бы реорганизовал часть работы на вспомогательный класс с кучей статических методов (например, Length), чтобы выполнить некоторые другие работы для меня. Я не уверен, как это выгодно, если бы у меня были личные методы помощника в моем классе. Не могли бы вы объяснить немного больше? –
Здесь я вижу 2 связанных аргумента. Во-первых, есть вероятность, что другие элементы вашей игры будут использовать один и тот же тип логики; то, возможно, позиция и движение ползучести являются его ответственностью, но соответствующие вычисления не таковы: расстояние до места назначения не похоже на работу ползучести. Я хотел бы использовать статический помощник для геометрических вычислений, но вы также можете получить нестатический класс Board или что-то в этом роде, которое будет занимать позиции и обрабатывать расстояния. – Mathias