2012-04-19 14 views
3

私は、name = value形式で多くのデータを吐き出すAPIを使用しています。最初に私は単純な文字列の比較を行うことですべてを処理しました:しかし、処理できる名前は20種類以上あり、これはすぐに維持するのが難しくなりました。大域定数を.NETライブラリに配置する場所はどこですか?

Private Class Parameters 
    Private Sub New() 
    End Sub 

    Public Const ThisName As String = "thisname" 
    Public Const ThatName As String = "thatname" 

End Class 

そして、私の方法は、次のようになります:私の次のステップは、専用のサブクラスで定義された定数に超える文字列を移動することでした

Sub ProcessData(ByVal name As String, ByVal value As String) 
     If name = Parameters.ThisName Then 
      DoThis(value) 
     ElseIf name = Parameters.ThatName Then 
      DoThat(value) 
     End If 
    End Sub 

これは、すでに大きな前進だったが、今私は自分が他のクラスでこれらの定数を使用できるようにする必要があると感じています。私はグローバルクラスに移動することを躊躇していますが、私は別のオプションを見ていません。

グローバル定数はどこにありますか?

答えて

4

これらは定数です。つまり、誰も自分の価値を変えることはできません。
これらの定数が何を表しているのか自分自身に尋ねる必要があります。
プログラム内のどこにでも必要なグローバル情報の一部である場合、それらをグローバル共有クラスに入れることに異論はありません。
意味の理解を深めるために、XMLコメントでコメントし、コーディングを進めます。

+0

私は複数の場所で必要なものは間違いありませんが、私の意見では、それらを動かすことは、主に定数の使用方法を理解することを難しくしています。実際には、各共有クラスの参照を検索して、その部分がどこに属しているかを確認する必要があります。 –

+1

モジュールも動作する可能性があります。 –

+0

@StevenDotNet間違いなく、あなたはすでにそこにいます(つまり、複雑さを管理する必要があります)。あなたはよく整理されたコードを持っている必要があります。たとえば、より多くのクラスから必要とされるすべての定数は、他のグローバルなものと単一のファイルに存在する可能性があります。 (種類のApplication.Core.dll) – Steve

5

定数はプライベートまたはフレンドである必要があります。障害モードは、その値がILにコンパイルされることです。したがって、あるアセンブリに対してバグ修正を作成して公開定数を変更すると、他のアセンブリでは、更新されたアセンブリを使用しても古い値が使用されます。非常に厄介な失敗モード。

パブリック定数値が必要な場合は、ReadOnlyキーワードを使用する必要があります。

+1

この考え方に従って、なぜあなたはReadonly Shared変数で定数を使用しますか? –

+3

彼らは安いです、彼らはローダーヒープにスペースを取らない。これは問題です。 –

関連する問題