冗長な情報 (既存のデータから生成される可能性がある) を保存するか、アクセスが必要になるたびに既存のデータを変換することが望ましいですか?
提供された回答が将来の参考資料として役立つことを期待して、以下でできる限り特定の問題を単純化しました。
例:
グリッド上の正方形にデータを配置するプログラムを開発したとしましょう (Tic-Tac-Toe の超記述的なゲームなど)、さまざまな詳細とそれぞれに一意の識別番号を割り当てます。
プログラム全体を通して、正方形の X および/または Y 座標に基づいてロジックを実行することがよくあります (3 つ並んでいるかどうかをチェックする) と、ID のみが必要な場合 (おそらく "SquareName[ID]" の文字列にアクセスするため) があります。これら 2 つのどちらがより頻繁にアクセスされるかは正確にはわかりませんが、どちらかというと接戦です。
これまでは、square クラス内に ID を格納し、X または Y だけが必要な場合はいつでも簡単な数式で変換していました。特に 1 つの正方形の座標を取得したいとします。
int CurrentX = (this.Square.ID - 1) % 3) + 1; // X coordinate, 1 through 3
int CurrentY = (this.Square.ID + 1) / 3; // Y, 1 through 3
セットアップ後に正方形が移動したり ID を変更したりしないため、3 つの値すべてを Square クラス内に格納する方が簡単だと思う人もいますが、X と Y へのアクセスはすでに簡単であるため、冗長性にうんざりしている部分もあります。既存の ID から計算するのに十分です。
(注: このプログラム自体はメモリやリソースをあまり消費せず、グリッドのサイズもそれほど大きくならないため、ほとんどの場合、どちらのオプションがより適切な方法または経験則であるかに依存します。)
あなたならどうしますか?