前回は2文字の略語は2文字とも大文字,3文字の略語は1文字目だけ大文字にするというなんともややこしいお話をしました。今回は名前空間の話をします。
「パスカル」と「キャメル」の解説の時にも少し触れましたが,その際は「パスカル」で命名してくださいという事だけお話しました。しかし名前空間はパスカルで命名するという事以外にも決まりがあるのでそれを解説します。
C#でソリューションとプロジェクトを作成すると,デフォルトでプロジェクト名が名前空間になるようになっています。しかしこれはこのまま使ってはいけません。マイクロソフトの名前付けガイドラインでは次のようなルールで命名するように推奨しています。
「会社名+製品名+プロジェクト名+フォルダー名」
「会社名」「製品名」「プロジェクト名」「フォルダー名」といった感じです。
そもそも名前空間とは他のアプリケーション等のクラスとの名前の衝突を防ぐために存在します。自分で作成したクラス名「FileHelper」が他社で作成された「FileHelper」と重複した場合,クラス名だけだとどちらのクラスの事か判断できませんが,そこに「会社名」が入っていれば,会社名が同じで無い限り名前が衝突することはありません。では「会社名」だけでよいかというとそうはいきません。会社の中でも複数の製品が存在し,いろんなチームがクラスを作成しています。その場合,他のチームの作ったクラスと判別できなくなります。そこで「会社名+製品名」とします。これでほとんどの場合,名前の衝突は回避できます。同一の製品で複数のアプリケーションを作る場合はさらに「アプリケーション名」も追加して名前の衝突を回避しましょう。
あとは1つのアプリケーションの中でも複数のプロジェクトがある場合は,それぞれがプロジェクト名を名前空間に含めることで自身のソリューションの中でも名前の衝突を防ぎます。そして最後にフォルダーの中にあるクラスには「フォルダー名」も付けます。これは名前の衝突よりも,名前空間を見るだけで,ファイルがどこに存在するかを判断する目的の方が大きいです。
というわけで,「会社名+製品名+(アプリケーション名)+プロジェクト名+フォルダー名」という感じで名前空間を付けましょう。
例
例えば「Anderson」という会社の「MX99」という製品のアプリケーションを作成している場合は「Anderson.MX99.Domain.ValueObjects」といった感じになります。この場合「Domain」はプロジェクト名です。「Domain」というプロジェクトに「ValueObjects」というフォルダーがある場合を想定しています。
この場合,「Anderson.MX99」という部分を書かなければ,1つのアプリケーションが1つの会社で「Domain」という名前空間を占有してしまうことになるので,「Anderson.MX99」と記述することで「MX99」開発チームの中の「Domain」という名前空間としてクラスを作成していくことができます。
#02_名前の付け方
#03_名前付けのガイドライン
#04_パスカルケースとキャメルケース
#05_パスカルとキャメルの内訳
#06_パスカルとキャメルの実演
#07_2文字の略語は大文字にする
#08_名前空間のガイドライン
#09_ローカルルールについて
#10_private変数にアンダーバーを付ける
#11_コントロールの名付け
#12_クラス名とファイル名の名づけ
#13_StyleCopAnalyzersについて
#14_StyleCopAnalyzersのインストール
#15_ネームスペースの調整
#16_SA0001_プロパティのビルドのXMLでファイルを指定しておくと消える
#17_CS1591_XMLコメントなし
#18_SA1101_thisが付いていない
#19_不要なルールを非表示にする方法
#20_SA1200_usingの場所
#21_SA1400_アクセス修飾子が明示的に定義されていない
#22_その他不要なルールを非表示
#23_コンストラクタとデストラクタを作成
#24_Private変数とパラメータ変数の命名
#25_中括弧の省略禁止と改行
#26_コメントはスラッシュ4つ
#27_プロパティのXMLコメント
#28_コンストラクタやプロパティの書く順番
#29_アクセスレベルを加味した書く順番
#30_インタフェースのIとファイル名の不一致
#31_最後に