0

冗長な情報 (既存のデータから生成される可能性がある) を保存するか、アクセスが必要になるたびに既存のデータを変換することが望ましいですか?

提供された回答が将来の参考資料として役立つことを期待して、以下でできる限り特定の問題を単純化しました。

例:

グリッド上の正方形にデータを配置するプログラムを開発したとしましょう (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 から計算するのに十分です。

(注: このプログラム自体はメモリやリソースをあまり消費せず、グリッドのサイズもそれほど大きくならないため、ほとんどの場合、どちらのオプションがより適切な方法または経験則であるかに依存します。)

あなたならどうしますか?

4

2 に答える 2

1

経験則として、データが読み取り/書き込みであるシステムの場合、基本データを冗長性なしで保存します

パフォーマンスやその他の考慮事項が実際の問題になる場合は、必要に応じて非正規化する必要があります。(つまり、問題が発生するのを待ちます。過度に事前に最適化しないでください)。

目標は、可能な限り保守しやすいコードにする必要があります。これは通常、可能な限り最小限のコードを記述することを意味します。データ ポイントの冗長コピーを維持するための余分なコードがあると、コードがより脆弱になります。

于 2012-08-07T18:57:19.727 に答える
0

それらが作成時に決定でき、その後変更されない値である場合、コンストラクターに入力された変数を使用します。他の場所に保存されていない限り、冗長な情報ではありませんが、それは私の主なポイントではありません。私のコードを読むとき、私は通常、リクエスト時に何かが計算されるたびに、リクエストごとに変更される可能性があると考えています。特に変更されない場合は、ソース内でフィールドが入力され、変更された場所を簡単に見つけることができますが、常に同じ結果を返す計算を見ると、少し混乱する可能性があります。変数は変更できず、ケースを見落としているだけなのか、それとも本当に静的なのか疑問に思います。また、わかりやすい変数名を使用すると、コメントを取り除くことができます。

于 2012-08-07T18:56:32.583 に答える