:異種オブジェクトの複雑なツリーをナビゲートする最適な方法は何ですか?たとえば
class Vehicle {
Collection<Axle> axles;
}
class Axle {
Collection<Wheel> wheels;
}
class Wheel {
// I think there are dually rims that take two tires -- just go with it
Collection<Tire> tires;
}
class Tire {
int width;
int diameter;
}
私は私が知っているすべての車両オブジェクトのコレクションを取得することができ、それを通してサービスを提供しています。今私は、特定の幅と直径のタイヤを持っていると私はそれを取ることができる車両を見つけるしたいと言います。単純な方法はそうのように、4つのネストされたループのセットを持つことです。
for (Vehicle vehicle : vehicles) {
for (Axle axle : vehicle.getAxles()) {
for (Wheel wheel : axle.getWheels()) {
for (Tire tire : wheel.getTires()) {
if (tire.width == targetWidth
&& tire.diameter == targetDiameter) {
// do something
break;
}
}
}
}
}
は、このための良いデザインパターンがありますか?または、使用するより良いデータ構造ですか?車にマッピングされたタイヤ情報のどこかのインデックスを保持する方が良いでしょうか?
編集:コメント
からの質問に答えるあなたがサービスから受け取ったデータの構造を制御することがありますか?
はい
あなたは、同じデータに異なるタイヤに対して複数回検索する必要がありますか?
はい
パフォーマンスが問題ですか?
ない特に
あなたはタイヤを見つけた場合、あなたはそれが含まれている車両を知る必要がありますか、また、車軸とホイールが必要なのですか?時には、ちょうど車
、時々ちょうど車軸 - 二つの異なるコンテキスト
あなたが発見されたタイヤへの参照が必要ですか?
はい、私は車軸
EDIT2必要がある場合には: は、上記2つのコンテキストを説明するために、さらにメタファーの拡張:
コンテキスト1 - 私が知りたいです車両を回収して戻すことができます
状況2 - 私は仕事をしようとしている車両にいるので、車軸とタイヤを知りたい
それが依存...あなたは持っていますかサービスから受け取るデータの構造を制御できますか?同じデータで複数のタイヤを何度も検索する必要がありますか?パフォーマンスは問題ですか?タイヤを見つけたら、どの車にそれが入っているかを知る必要がありますか、車軸と車輪も必要ですか?見つかったタイヤのリファレンスが必要ですか? – Cinnam
私は郵便で回答しました。見てくれてありがとう! –
この問題は、デメテルの法則(「法律」よりも原則です)に関連しているように見えます。 http://stackoverflow.com/q/12284057/1168342 – Fuhrmanator