【发布时间】:2012-08-13 09:33:40
【问题描述】:
我正在开发一个视觉跟踪火车的项目。我已经多次重构了火车、轨道和各自的绘图类之间的对象关系,但我对它们中的任何一个都不满意。也许你们可以在这里帮助我。
这是我现在拥有的对象的接口。
曲目:
- addControlPoint(IntPoint 点)
- getPointAtPosition(float positionOnTheCurve)
- getTangentAtPosition(float positionOnTheCurve)
- getMaxPosition()
TrackDrawer:
- setGraphicsContext(Graphics g);
- 绘制(跟踪轨迹);
火车:
- set/getTrack(Tracks track)
- set/getTrackPosition(浮动位置)
- set/getSpeed(int speed)
- moveForward(elapsedTime)
火车抽屉:
- setGraphicsContext(Graphics g)
- 画(火车)
这是它们目前的使用方式。
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);
}
这里有几个具体问题:
火车依赖轨道有意义吗?我认为确实如此,因为没有轨道的火车在现实世界中毫无意义。
为了绘制火车,我需要通过计算轨道本身的切线来找出火车在轨道上所面对的方向。这会导致 TrainDrawer 内部的 Track 依赖,我不在乎。但是,我认为让 Train 负责计算方向矢量(切线)并不一定有意义,因为它仅用于绘制火车,并且没有其他原因。
一般来说,创建需要以某种方式绘制的对象的最佳实践是什么?很多人告诉我,火车应该知道如何绘制自己,但这似乎对火车本身施加了太多的依赖。感觉不对。
【问题讨论】:
标签: oop architecture