Nomes de namespaces
Observação
Este conteúdo é reimpresso com permissão da Pearson Education, Inc. de Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition. Essa edição foi publicada em 2008 e, desde então, o livro foi totalmente revisado na terceira edição. Algumas das informações nesta página podem estar desatualizadas.
Assim como acontece com outras diretrizes de nomenclatura, a meta ao nomear namespaces está criando clareza suficiente para o programador usar a estrutura para saber imediatamente qual será o conteúdo do namespace. O modelo a seguir especifica a regra geral para nomear namespaces:
<Company>.(<Product>|<Technology>)[.<Feature>][.<Subnamespace>]
Os exemplos são os seguintes:
Fabrikam.Math
Litware.Security
✔️ CRIE nomes de namespace de prefixo com um nome de empresa para evitar que namespaces de empresas diferentes tenham o mesmo nome.
✔️ USE um nome de produto estável e independente de versão no segundo nível de um nome de namespace.
❌ NÃO use hierarquias organizacionais como base para nomes em hierarquias de namespace, pois os nomes de grupo dentro das corporações tendem a ser de curta duração. Organize a hierarquia de namespaces em torno de grupos de tecnologias relacionadas.
✔️ USE PascalCasing e separe componentes de namespace com períodos (por exemplo, Microsoft.Office.PowerPoint
). Se sua marca emprega maiúsculas e minúsculas não tradicionais, você deve seguir o que foi definido por sua marca, mesmo que isso se desvie do uso normal do namespace.
✔️ CONSIDERE o uso de nomes de namespace no plural, quando apropriado.
Por exemplo, use System.Collections
ao invés de System.Collection
. No entanto, nomes de marcas e acrônimos são exceções a essa regra. Por exemplo, use System.IO
ao invés de System.IOs
.
❌ NÃO use o mesmo nome para um namespace e um tipo nesse namespace.
Por exemplo, não use Debug
como um nome de namespace e forneça também uma classe nomeada Debug
no mesmo namespace. Vários compiladores exigem que esses tipos sejam totalmente qualificados.
Namespaces e conflitos de nome de tipo
❌NÃO introduza nomes de tipo genéricos, como Element
, Node
, Log
e Message
.
Há uma probabilidade muito alta de que isso leve a conflitos de nome de tipo em cenários comuns. Você deve qualificar os nomes de tipo genérico (FormElement
, XmlNode
, EventLog
, SoapMessage
).
Há diretrizes específicas para evitar conflitos de nome de tipo para diferentes categorias de namespaces.
Namespaces do modelo de aplicativo
Namespaces pertencentes a um único modelo de aplicativo geralmente são usados juntos, mas quase nunca são usados com namespaces de outros modelos de aplicativo. Por exemplo, o namespace System.Windows.Forms raramente é usado junto com o namespace System.Web.UI. Veja a seguir uma lista de grupos de namespace conhecidos do modelo de aplicativo:
System.Windows*
System.Web.UI*
❌ NÃO dê o mesmo nome a tipos em namespaces em um único modelo de aplicativo.
Por exemplo, não adicione um tipo nomeado
Page
ao namespace System.Web.UI.Adapters, pois o namespace System.Web.UI já contém um tipo chamadoPage
.Namespaces de infraestrutura
Esse grupo contém namespaces que raramente são importados durante o desenvolvimento de aplicativos comuns. Por exemplo, namespaces
.Design
são usados principalmente ao desenvolver ferramentas de programação. Evitar conflitos com tipos nesses namespaces não é crítico.Namespaces principais
Os namespaces principais incluem todos os namespaces
System
, namespaces dos modelos de aplicativo e os namespaces de infraestrutura. Os namespaces principais incluem, entre outros,System
,System.IO
eSystem.Xml
System.Net
.❌ NÃO forneça nomes de tipos que entrariam em conflito com qualquer tipo nos namespaces principais.
Por exemplo, nunca use
Stream
como um nome de tipo. Ele entraria em conflito com o System.IO.Stream, um tipo usado com muita frequência.Grupos de namespaces de tecnologia
Essa categoria inclui todos os namespaces com os mesmos dois primeiros nós de namespace
(<Company>.<Technology>*
), comoMicrosoft.Build.Utilities
eMicrosoft.Build.Tasks
. É importante que os tipos pertencentes a uma única tecnologia não entrem em conflito entre si.❌ NÃO atribua nomes de tipo que entrariam em conflito com outros tipos dentro de uma única tecnologia.
❌ NÃO introduza conflitos de nome de tipo entre tipos em namespaces de tecnologia e um namespace de modelo de aplicativo (a menos que a tecnologia não se destine a ser usada com o modelo de aplicativo).
Portions © 2005, 2009 Microsoft Corporation. Todos os direitos reservados.
Reimpresso com permissão da Pearson Education, Inc. das Diretrizes de Design do Framework: convenções, linguagens e padrões para bibliotecas do .NET reutilizável, 2ª edição por Krzysztof Cwalina e Brad Abrams, publicado em 22 de outubro de 2008 por Addison-Wesley Professional como parte da série de desenvolvimento do Microsoft Windows.