新しいクラスのインターフェイスを最もうまく構築する方法について疑問があります。新しいクラスと通信する他の2つのクラス、Platform
とSensor
があります。新しいクラスPathfinder
は、センサデータをSensor
から受信し、パスを計算するときに新しいデータを考慮に入れます。 Platform
がPathfinder
によって作成されたパスに沿って移動していますが、Sensor
が脅威を検出した場合は、Platform
によって自動的に使用される新しいパスが生成されます。クラスのインターフェイス設計の苦境
私が今まで描いてきたインタフェースは、擬似C++で次のようになります。
class Sensor {
Detect() {
// Get Data
Pathfinder.Process(Data)
}
}
class Platform {
Move() {
while(Can move further)
Waypoint w = Pathfinder.GetNextWaypoint()
// Move towards w
if(Arrived at w)
Pathfinder.PassedWaypoint()
}
}
class Pathfinder {
Process(Data) {
// Adapt path to accomodate Data
RecalculatePath()
}
GetNextWaypoint() {
if(!Path calculated)
RecalculatePath()
return Path.front()
}
PassedWaypoint() {
Path.pop_front()
}
RecalculatePath() {
// Do pathfinding
}
vector<Waypoint> Path
}
は、私は、プラットフォームは、パスファインダーと対話する方法と、本当に満足していません。一方、プラットフォーム全体をフェッチすると、何かが変更されたかどうか定期的にチェックする必要があります。
このデザインをどのように改善できますか?
Pathfinderは、ルートが変更されたことをプラットフォームに通知するためにコールバックを使用できます。これにより、データのコピーが最小限に抑えられ、ポーリングが冗長になります。 – RedX
または、コールバックのアイデアを少し一般化すると、メッセージを扱うことができます。フレームワークを使用していますが、すでにメッセージが渡されている可能性がありますか? –