プロジェクトで使用される定数宣言のこれら 2 つのアプローチを見てきました。
パブリック モジュールの定数。
NonInheritable(Sealed) クラスの定数
定数宣言に他のアプローチを使用する人はいますか?
これらのアプローチに違いはありますか、長所と短所はありますか?
ありがとう。
定数は、最も関連性の高いクラスに配置します。たとえばMath.Pi
、Int32.MinValue
などです。
実際には列挙型であるべきさまざまな定数も見てきました-特にステータスコードなど.
定数が関連付けられている適切なクラスが実際に存在しない場合を除き、定数のためだけにクラス (またはモジュール) を作成するのは賢明ではないと思います。
@Jonに同意します。ただし、アプリケーションに固有の定数(つまり、構成のデフォルト、調整パラメーターなど)の場合、それらを保持するために強い型の静的構成クラスを作成することがあります。パブリックゲッターのみが定義されたプロパティを介して値を公開します。このようにして、構成ファイルからロードできますが、コード全体で固定値として参照されます。
私の実践は、ジョンが述べていることと似ています。列挙型と定数の大部分は明らかに特定のクラスまたはモジュールに関連付けられており、そこで public と宣言されています。
私のソフトウェアの最下位レベルはユーティリティと呼ばれ、数学ルーチンやその他の関数、および一般的なユーティリティのメソッドが含まれています (そのアプリケーションのモードに固有のユーティリティではありません)。共通のテーマを持たないユーティリティ関数/サブルーチンである関数の束としてモジュールがあります。列挙型または定数が移動するのは、その 1 つの領域です。
アプリケーションモデルには、そのアプリケーションで一般的に使用されるユーティリティが含まれる同様の領域があります。そして、モデルのどのクラスにも結び付けられない定数がどこに行くのか。
つまり、私の個人的なフレームワークで定数を見つけることができる領域が 3 つあります。
クラス宣言 アプリケーション モデルの汎用ユーティリティ モジュール ユーティリティ アセンブリの汎用ユーティリティ モジュール。
実際には、どちらのユーティリティ モジュールでも宣言する必要があったのは、数十の列挙型と定数のうちのほんの一握りだけでした。それらのほとんどは、アセンブリにインポートされた Win32 関数によって使用される Win32 減速です。