Namen von Namespaces
Hinweis
Diese Inhalte wurden mit Genehmigung von Pearson Education, Inc. aus Framework Design Guidelines nachgedruckt: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition. Diese Ausgabe wurde 2008 veröffentlicht, und das Buch wurde seitdem in der dritten Ausgabe vollständig überarbeitet. Einige der Informationen auf dieser Seite sind möglicherweise veraltet.
Wie bei anderen Benennungsrichtlinien auch sollen Programmierer*innen, die das Framework nutzen, anhand der Benennung von Namespaces sofort den wahrscheinlichen Inhalt des Namespaces erkennen können. Die folgende Vorlage legt die allgemeine Regel für die Benennung von Namespaces fest:
<Company>.(<Product>|<Technology>)[.<Feature>][.<Subnamespace>]
Hier finden Sie einige Beispiele:
Fabrikam.Math
Litware.Security
✔️ VERWENDEN SIE als Präfix für Namespacenamen einen Firmennamen, damit Namespaces verschiedener Unternehmen nicht denselben Namen aufweisen.
✔️ VERWENDEN SIE auf der zweiten Ebene eines Namespacenamens einen beständigen, versionsunabhängigen Produktnamen.
❌ VERWENDEN SIE KEINE Organisationshierarchien als Grundlage für Namen in Namespacehierarchien, da Gruppennamen innerhalb von Unternehmen meist kurzlebig sind. Organisieren Sie die Hierarchie der Namespaces um Gruppen verwandter Technologien.
✔️ VERWENDEN SIE die PascalCasing-Konvention, und trennen Sie Namespacekomponenten mit Punkten (z. B. Microsoft.Office.PowerPoint
). Wenn Ihre Marke eine unübliche Groß-/Kleinschreibung verwendet, sollten Sie die von Ihrer Marke definierte Groß-/Kleinschreibung befolgen, auch wenn diese von der normalen Groß-/Kleinschreibung des Namespaces abweicht.
✔️ ERWÄGEN SIE die Verwendung von Pluralnamespacenamen, wo dies angebracht ist.
Verwende z. B. System.Collections
statt System.Collection
. Markennamen und Akronyme sind jedoch Ausnahmen von dieser Regel. Verwende z. B. System.IO
statt System.IOs
.
❌ VERWENDEN SIE NICHT denselben Namen für einen Namespace und einen Typ in diesem Namespace.
Sie sollten z. B. nicht Debug
als Namespacenamen verwenden und dann eine Klasse namens Debug
im selben Namespace bereitstellen. Verschiedene Compiler setzen voraus, dass solche Typen vollständig qualifiziert sind.
Namespaces und Typnamenkonflikte
❌ FÜHREN SIE KEINE generischen Typnamen wie Element
, Node
, Log
und Message
ein.
Die Wahrscheinlichkeit, dass dies in gängigen Szenarien zu Konflikten mit Typnamen führt, ist sehr hoch. Sie sollten die generischen Typnamen qualifizieren (FormElement
, XmlNode
, EventLog
, SoapMessage
).
Für verschiedene Kategorien von Namespaces gibt es spezielle Richtlinien zur Vermeidung von Typnamenkonflikten.
Namespaces für Anwendungsmodelle
Namespaces, die einem einzigen Anwendungsmodell angehören, werden sehr oft zusammen verwendet, aber fast nie mit Namespaces anderer Anwendungsmodelle. Beispielsweise wird der Namespace System.Windows.Forms sehr selten zusammen mit dem Namespace System.Web.UI verwendet. Im Folgenden finden Sie eine Liste der bekannten Namespacegruppen für Anwendungsmodelle:
System.Windows*
System.Web.UI*
❌ Benennen Sie Typen in Namespaces innerhalb eines einzigen Anwendungsmodells NICHT gleich.
Fügen Sie beispielsweise keinen Typ namens
Page
zum Namespace System.Web.UI.Adapters hinzu, da der Namespace System.Web.UI bereits einen Typ namensPage
enthält.Infrastrukturnamespaces
Diese Gruppe enthält Namespaces, die bei der Entwicklung gängiger Anwendungen selten importiert werden. Zum Beispiel werden
.Design
-Namespaces hauptsächlich bei der Entwicklung von Programmiertools verwendet. Die Vermeidung von Konflikten mit Typen in diesen Namespaces ist weniger wichtig.Grundlegende Namespaces
Zu den grundlegenden Namespaces gehören alle
System
-Namespaces, mit Ausnahme der Namespaces für Anwendungsmodelle und die Infrastrukturnamespaces. Zu den grundlegenden Namespaces gehören unter anderemSystem
,System.IO
,System.Xml
undSystem.Net
.❌ Geben Sie den Typen KEINE Namen, die zu einem Konflikt mit Typen in den grundlegenden Namespaces führen würden.
Verwenden Sie z. B.
Stream
niemals als Typnamen. Dieser Name steht in Konflikt mit System.IO.Stream, einem sehr häufig verwendeten Typ.Technologienamespacegruppen
Zu dieser Kategorie gehören alle Namespaces, bei denen die ersten beiden Namespaceknoten
(<Company>.<Technology>*
) identisch sind, z. B.Microsoft.Build.Utilities
undMicrosoft.Build.Tasks
. Es ist wichtig, dass die Typen innerhalb einer einzelnen Technologie nicht zueinander in Konflikt stehen.❌ Vergeben Sie KEINE Typnamen, die mit anderen Typen innerhalb einer einzigen Technologie in Konflikt stehen.
❌ FÜHREN SIE KEINE Typnamenkonflikte zwischen Typen in Technologienamespaces und einem Anwendungsmodellnamespace ein (es sei denn, die Technologie ist nicht für die Verwendung mit dem Anwendungsmodell vorgesehen).
Teile ©2005, 2009 Microsoft Corporation. Alle Rechte vorbehalten.
Nachdruck mit Genehmigung von Pearson Education, Inc aus Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition von Krzysztof Cwalina und Brad Abrams, veröffentlicht am 22. Oktober 2008 durch Addison-Wesley Professional als Teil der Microsoft Windows Development Series.