2012-04-07 2 views
1

私は「部分」オブジェクトと「重要」オブジェクトを持っています。各部品には最大で1つの材料が割り当てられています。各材料は0以上のパーツに割り当てられます。これは2レベルのDAGです。構図や索引付けによってオブジェクトグラフを実装する方がいいですか?

各部品オブジェクトにその材料の参照がありますか?あるいは、単に材料名やインデックスを保存するほうがよいでしょうか。あるいは、データベースのほかに別の方法がありますか?

最初の方法は同じ素材オブジェクトに対する複数の参照を意味しますが、これは悪いと思われますが、どれくらい悪いですか?

数値インデックスが正しく更新されないか、または名前でマテリアルを参照する際に文字列比較が必要なため、2番目の方法は醜いようです。また、すでに言語で利用可能なオブジェクト参照を再開発しています。

+0

プロパティまたは材料がおそらく変更されることはないため、材料が変更不能になっている最初の方法(材料に関連する部品)が良いかもしれません。 –

答えて

0

参照してください。それは速く、少しの記憶を使用し、あなたはそれを必要とします。 (あなたが実際にそれを使用すると仮定します。別のオプションまたは追加のオプションは、各マテリアルのパーツリファレンスのリストを保持することですが、必要がない場合はこれをしないでください)。

マテリアル名またはインデックスは、マテリアルのオブジェクトを取得しようとすると、より多くのスペースを使用し、より多くのコストを必要とします。実際に、部品の材料の名前を取得する最も安価な方法は、材料を取得し、材料から名前またはインデックスを取得するために参照を使用することです。

プログラムで内部的に名前とインデックスを使用しないでください。彼らはdoを使用して、データベースや他のプログラムから物事を得るためにあなたのプログラムに保存する必要があります。 (実際には、「その他のプログラム」はソケットなどを意味します。フラットファイル - 当初はデータは別のプログラムまたはこのプログラムの別のセッションからのものでした)そして、を参照してください。削除すると、すべての参照を変更する必要があります。または、素材を削除済みとしてマークすることもできます(ガベージコレクションでうまく動作しますが、再追加を監視する)。

自分自身と矛盾する:資料(例としてあなたのケースを使用する)が継続的に追加され削除されたときにうまく動作するため、まれに参照の代わりに名前を使用しました。私が何かを「材木」として識別すると、その名前の材料は、その部品の使用に影響を与えることなく、その日の終わりに100回も削除して追加することができます。

+0

リファレンスを格納する乱雑なオブジェクトグラフのコメントはどこにつながりますか?すぐに問題になるのは、すべてのデータのクローン作成が複雑になるということです。 – user1318499

+0

@ user1318499:クローンしないでください!私は第3段落の質問に答えなかった。同じマテリアルへの複数の参照は悪いことではありません。あなたが望むものです。すべての部品が参照されている材料のリストが必要です。これは、マテリアルを変更し、その変更がそのマテリアルを使用するすべてのパーツに影響を与えることを意味します。うまくいけば、これのようなことをするまでにはしばらく時間がかかるでしょうが、その能力はそこにあります。これは物事をより簡単に保つはずです。 – RalphChapin

+0

@ user1318499:ほとんどの言語には、IDEが認識する「tostring」メソッドのようなものがあります。 marterialsクラスの名前を表示するためにそれを実装すると、その名前がデバッガの参照値として表示され、オブジェクトグラフを通る移動を高速化できます。あなたがそれを正しくコーディングするなら、あなたはここで多くの問題を抱えませんが、あなたがするまで助けになります。 – RalphChapin

関連する問題