4

オブジェクトまたはオブジェクトへの参照を他のオブジェクトに格納する方が良いですか? 例を挙げて説明しましょう。

私は1つのオブジェクト「チーム」と1つのオブジェクト「ユニット」を持っています。ユニットはチームに属しています。オブジェクト「チーム」にオブジェクト「ユニット」を「保存」したい。

1)私はこのようなことをすることができます:ユニットはチームオブジェクトに保存されます

// class Team
function Team() {
    this.units = [];
}
// class Unit
function Unit(team) {
    team.units.push(this);
}
myTeam = new Team();
units = [];
units[units.length] = new Unit( myTeam );

2)またはこのようなもの:ユニットIDはチームオブジェクトに保存されます

// class Team
function Team() {
    this.units = [];
}
// class Unit
function Unit(team, id) {
    team.units.push(id);
}
myTeam = new Team();
units = [];
units[units.length] = new Unit( myTeam, units.length );

それは理解できますか?

4

2 に答える 2

5

最初の、よりオブジェクト指向のアプローチを確実に採用してください。ID と外部配列を持つことの利点はわかりません。しかし、欠点は明らかです。

  • 外部units配列は気付かないうちに変更される可能性があり、ID が同期されなくなり、ほとんど役に立たなくなります。それをデバッグしてみてください!

  • カプセル化がないため、それぞれTeamが任意の変更を行うことができますUnit

  • 1 つの配列がすべてのユニットへの参照を格納しているように見えTeam ますがUnit.

  • を削除するとどうなりますTeamか?

    • すべての s を直接削除しないUnitと、メモリ リークが発生します。

    • unitsそのすべてのユニットを共通テーブルから削除したい場合があります。しかし、これはunitsテーブルにギャップを残します。

    • ユニットも削除して配列を圧縮すると、配列内のインデックスが変更されるため、units他のすべての を変更する必要がありますTeam

  • の ID にUnitはビジネス価値がありません

于 2012-12-02T14:57:36.613 に答える
2

オブジェクトを格納するとより多くのメモリが消費されるという懸念がある場合、これは正しくありません。

Javascript のオブジェクトは、メモリのどこかに格納されているデータの単位ですが、最初のコード サンプルでオブジェクトを追加するときは、そのメモリの一部への参照を追加しているだけです。オブジェクトのコピーを作成しているのではありません (2 倍になるメモリ使用量)。ストレージに関する限り、2 番目のアプローチではパフォーマンス上の利点はありません。

では、デザインについて考えてみましょう。オブジェクトの id がフィールドのセットの一部ではない、関連付け配列などを何度も使用してきました。オブジェクトだけでなくその ID もどこかに渡す必要がある場合が常にあったため、これは常により複雑なコードにつながります。特別な状況がない限り、id がオブジェクトの一部であると見なされることは、通常は完全に理にかなっています。概念レベルで意味のある設計上の決定は、さらに優れた設計の選択につながる可能性があります。

したがって、私の投票は間違いなく選択肢 1 です。

于 2012-12-02T15:17:38.293 に答える