Nomes de namespaces
Nota
Este conteúdo é reimpresso com permissão da Pearson Education, Inc., a partir 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 revisto na terceira edição. Algumas das informações nesta página podem estar desatualizadas.
Como acontece com outras diretrizes de nomenclatura, o objetivo ao nomear namespaces é criar clareza suficiente para o programador que usa a estrutura 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>]
Seguem-se alguns exemplos:
Fabrikam.Math
Litware.Security
✔️ Nomes de namespace de prefixo DO com um nome de empresa para impedir que namespaces de empresas diferentes tenham o mesmo nome.
✔️ DO 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, porque 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.
✔️ O DO usa PascalCasing e separa componentes de namespace com pontos (por exemplo, Microsoft.Office.PowerPoint
). Se sua marca emprega invólucro não tradicional, você deve seguir o invólucro definido por sua marca, mesmo que ele se desvie do invólucro de namespace normal.
✔️ CONSIDERE o uso de nomes de namespace plural quando apropriado.
Por exemplo, use System.Collections
em vez de System.Collection
. No entanto, nomes de marcas e siglas são exceções a essa regra. Por exemplo, use System.IO
em vez 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, em seguida, também forneça 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éricos (FormElement
, XmlNode
, EventLog
, SoapMessage
).
Há diretrizes específicas para evitar conflitos de nome de tipo para diferentes categorias de namespaces.
Namespaces de modelo de aplicativo
Os namespaces pertencentes a um único modelo de aplicativo são frequentemente usados juntos, mas quase nunca são usados com namespaces de outros modelos de aplicativo. Por exemplo, o System.Windows.Forms namespace raramente é usado junto com o System.Web.UI namespace. A seguir está uma lista de grupos de namespace de modelo de aplicativo bem conhecidos:
System.Windows*
System.Web.UI*
❌ NÃO dê o mesmo nome a tipos em namespaces dentro de um único modelo de aplicativo.
Por exemplo, não adicione um tipo nomeado
Page
ao System.Web.UI.Adapters namespace, porque o System.Web.UI namespace 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,
.Design
namespaces são usados principalmente no desenvolvimento de ferramentas de programação. Evitar conflitos com tipos nesses namespaces não é fundamental.Namespaces principais
Os namespaces principais incluem todos os
System
namespaces, excluindo namespaces dos modelos de aplicativo e os namespaces Infrastructure. Os namespaces principais incluem, entre outros,System
, ,System.IO
System.Xml
eSystem.Net
.❌ NÃO dê nomes de tipos que entrem em conflito com qualquer tipo nos namespaces Core.
Por exemplo, nunca use
Stream
como um nome de tipo. Entraria em conflito com System.IO.Streamo , um tipo muito usado.Grupos de namespaces de tecnologia
Esta categoria inclui todos os namespaces com os mesmos dois primeiros nós de
(<Company>.<Technology>*
namespace ), 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 entrem 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).
© Partes 2005, 2009 Microsoft Corporation. Todos os direitos reservados.
Reimpresso com permissão da Pearson Education, Inc., de Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition por Krzysztof Cwalina e Brad Abrams, publicado em 22 de outubro de 2008 por Addison-Wesley Professional como parte da Microsoft Windows Development Series.