名前空間の名前

他の命名ガイドラインと同様に、名前空間に名前を付ける際の目的は、フレームワークを使用するプログラマが名前空間の内容がどのようなものであるかをすぐに把握できるように、十分なわかりやすいものにすることです。 次のテンプレートには、名前空間の名前付けに関する一般的な規則が指定されています。

<Company>.(<Product>|<Technology>)[.<Feature>][.<Subnamespace>]

次に例を示します。

Fabrikam.Math Litware.Security

✔️ 異なる企業の名前空間が同じ名前にならないように、会社名を使用して名前空間名にプレフィックスを付けます。

✔️ 名前空間名の 2 番目のレベルには、バージョンに依存しない安定した製品名を使用します。

❌ 企業内のグループ名は有効期間が短くなる傾向があるため、名前空間階層における名前のベースとして組織階層を使用しないでください。 関連するテクノロジのグループに基づいて名前空間の階層を編成します。

✔️ PascalCasing (パスカル ケース) を使用し、ピリオドを使用して名前空間のコンポーネントを分離します (例: Microsoft.Office.PowerPoint)。 ご自身のブランドで従来にない大文字小文字の区別が使用されている場合は、それが通常の名前空間での大文字小文字の区別から逸脱していたとしても、ブランドで定義されている大文字小文字の区別に従う必要があります。

✔️ 複数形の名前空間名が適切な場合は、使用することを検討してください。

たとえば、System.Collection の代わりに System.Collections を使用します。 ただし、ブランド名と頭字語は、このルールの例外です。 たとえば、System.IOs の代わりに System.IO を使用します。

❌ 名前空間とその名前空間にある型に同じ名前を使用しないでください。

たとえば、名前空間名として Debug を使用しながら同じ名前空間に Debug という名前のクラスを指定することはできません。 いくつかのコンパイラにおいては、このような型を完全に修飾する必要があります。

名前空間と型名の競合

ElementNodeLogMessage などのジェネリック型の名前を採用しないでください。

これを行うと、一般的なシナリオで型名の競合が発生する可能性が非常に高くなります。 ジェネリック型の名前 (FormElementXmlNodeEventLogSoapMessage) は修飾する必要があります。

名前空間のカテゴリごとに、型名の競合を回避するための特定のガイドラインがあります。

  • アプリケーション モデルの名前空間

    1 つのアプリケーション モデルに属する名前空間は、一緒に使用されることがよくありますが、他のアプリケーション モデルの名前空間で使用されることはほとんどありません。 たとえば、System.Windows.Forms 名前空間が System.Web.UI 名前空間と一緒に使用されることはほとんどありません。 既知のアプリケーション モデル名前空間グループの一覧を次に示します。

    System.Windows* System.Web.UI*

    ❌ 単一のアプリケーション モデル内の名前空間の型に同じ名前を付けないでください。

    たとえば、Page という名前の型を System.Web.UI.Adapters 名前空間に追加しないでください。System.Web.UI 名前空間には、Page という名前の型が既に含まれているからです。

  • インフラストラクチャの名前空間

    このグループには、一般的なアプリケーションの開発時にインポートされることがほとんどない名前空間が含まれています。 たとえば、.Design 名前空間は主にプログラミング ツールを開発するときに使用されます。 これらの名前空間の型との競合を回避することは、重要ではありません。

  • コア名前空間

    コア名前空間には、アプリケーション モデルの名前空間とインフラストラクチャの名前空間を除く、すべての System 名前空間が含まれます。 なかでも、コア名前空間には SystemSystem.IOSystem.XmlSystem.Net が含まれています。

    ❌ コア名前空間の型と競合する型名を指定しないでください。

    たとえば、Stream を型名として使用しないでください。 これは、よく使用される型である System.IO.Stream と競合します。

  • テクノロジ名前空間グループ

    このカテゴリには、先頭の 2 つの名前空間ノード ((<Company>.<Technology>*) が同じであるすべての名前空間が含まれます。たとえば、Microsoft.Build.UtilitiesMicrosoft.Build.Tasks などです。 1 つのテクノロジに属する型が互いに競合しないことが重要です。

    ❌ 1 つのテクノロジ内の他の型と競合する型名を割り当てないでください。

    ❌ テクノロジ名前空間の型とアプリケーション モデルの名前空間の間に型名の競合を発生させないでください (そのテクノロジをそのアプリケーション モデルで使用することを意図していない場合は除きます)。

Portions © 2005, 2009 Microsoft Corporation.All rights reserved.

2008 年 10 月 22 日に Microsoft Windows Development シリーズの一部として、Addison-Wesley Professional によって発行された、Krzysztof Cwalina および Brad Abrams による「Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition」 (フレームワーク デザイン ガイドライン: 再利用可能な .NET ライブラリの規則、用法、パターン、第 2 版) から Pearson Education, Inc. の許可を得て再印刷されています。

関連項目