web-dev-qa-db-ja.com

マジックストリングの使用をどのように減らしますか?

アプリケーションデータベースには、次のスキーマを持つ構成テーブルがあります。

テーブル:ReleaseProperty

  1. ReleasePropertyID
  2. リリースID
  3. 名前

現在、特定のプロパティを取得するために、引数ReleaseID(現在のWebページアドレスから取得)とNameをリポジトリクラスに渡します。これは基本的にハードコードされています

例えば。

var property = ReleasePropertyRepository.Select(ReleaseID, "MyProperty");

コードの周りにハードコードされた文字列を使用するのは好きではありません。このコードの品質を向上させる唯一のアイデアは、定数にコンテナークラスを使用することです。

var property = ReleasePropertyRepository.Select(ReleaseID, Constants.MyProperty);

より良いコードを開発する他の方法はありますか?

3
simoneL

ハードコードされた文字列は問題ではありません。奴らに構うな。

あなたが持っているのはすべきですが、クエリをラップする関数なので、各識別子はコード内で一度だけ使用されます。

文字列が必要な場所が複数ある場合は、コンパイラが文字列の一貫性を確認するため、文字列の定数を作成するのが理にかなっています。しかし、コードの1箇所とデータベースの1箇所がある場合、定数を作成してもコンパイラーは何もチェックしません。そのため、定数によって得られるのは、より多くのコード行、(おそらく)定数が追加されたソースです。定数を変更する必要があるときはいつでも、より多くの場所が変更されます(この場合、定数の値と名前の両方を毎回変更する必要があるため、この場合、実際の文字列を知る必要があるため、シンボリック名とテキストを分岐させます事態を悪化させるでしょう)。また、データベース(または構成など)に対するチェックは、テストや実行時にのみ行われるため、まったく何も得られません。

ハードコードされた値に対する通常のアドバイスは、値の意味が値から明白ではない値に関するものであり、一貫性を保つ必要がある複数の場所に現れる記号定数を導入することによって明らかにすることができます。構成テーブルまたはプロパティテーブルのキーの意味is値から明らかであり、通常は多くの場所に表示されないため、アドバイスは適用されません。

または、もっと簡潔に言うと、値の説明的な名前がある場合、または実際の値を強く型付けできる場合は、記号定数を作成します。シンボリック名が値から派生する場合は、しないでください。

…あなたは後者のケースを持っているようです。

5
Jan Hudec