Я работаю над проектом визуального отслеживания поездов.Я несколько раз рефакторил объектные отношения между поездами, рельсами и соответствующими классами рисования, и я не доволен ни одним из них.Может быть, вы, ребята, можете помочь мне здесь.
Вот интерфейсы для объектов, которые у меня сейчас есть.
Треки:
- addControlPoint (IntPoint point)
- getPointAtPosition (плавающая позицияOnTheCurve)
- getTangentAtPosition (плавающая позицияOnTheCurve)
- getMaxPosition ()
TrackDrawer:
- setGraphicsContext (Графика g);
- ничья (дорожка треков);
Поезд:
- set / getTrack (след треков)
- set / getTrackPosition (плавающая позиция)
- set / getSpeed (int speed)
- moveForward (elapsedTime)
TrainDrawer:
- setGraphicsContext (Графика g)
- draw (Train train)
А вот как они используются в данный момент.
init() {
Tracks track = new Tracks();
track.addPoint( point1 );
track.addPoint( point2 );
track.addPoint( point3 );
Train train = new Train();
train.setTrack(track);
train.setPosition(0);
}
run() {
while (running) {
elapsedTime = calcTime();
update(elapsedTime);
Graphics g = getGraphics();
draw(g);
}
}
update(long elapsedTime) {
train.setSpeed(10);
train.moveForward(elapsedTime);
}
draw(Graphics g) {
trackDrawer.draw(track);
trainDrawer.draw(train);
}
Вотпара конкретных вопросов:
Имеет ли смысл, что поезд зависит от пути?Я думаю, что это так, поскольку поезд без рельса не имеет большого смысла в реальном мире.
Чтобы нарисовать поезд, мне нужно выяснить направление движения поезда.треки путем вычисления тангенса на самом треке.Это вызывает зависимость Track внутри TrainDrawer, которая мне не нужна.Однако я не думаю, что имеет смысл возлагать на Train ответственность за вычисление вектора направления (тангенса), когда он необходим ТОЛЬКО для рисования поезда, и ни по какой другой причине.
В целом, какова лучшая практика для создания объектов, которые нужно каким-то образом рисовать?Многие люди говорят мне, что поезд должен знать, как рисовать сам, но это, похоже, накладывает слишком много зависимостей на сам поезд.Это не правильно.