Pergunta

Posso entender o uso de um nível de namespaces.Mas 3 níveis de namespaces.Parece loucura.Existe algum uso prático para isso?Ou é apenas um equívoco?

Foi útil?

Solução

Os namespaces hierárquicos têm um uso, pois permitem definições progressivamente mais refinadas. Certamente um único provedor pode produzir duas classes com o mesmo nome. Freqüentemente, o primeiro nível é ocupado pelo nome da empresa, o segundo especifica o produto, o terceiro (e possivelmente mais) meu domínio.

Também existem outros usos da segregação de namespace. Uma situação popular é colocar as classes base para um padrão de fábrica em seu próprio espaço para nome e depois derivar fábricas em seus próprios namespaces pelo provedor. Por exemplo System.Data, System.Data.SqlClient e System.Data.OleDbClient.

Outras dicas

Obviamente, é uma questão de opinião. Mas tudo se resume à organização. Por exemplo, eu tenho um projeto que possui uma API de plug -in que possui funções/objetos que se parecem com o seguinte:

plugins::v1::function

Quando o 2.0 for lançado, eles serão colocados no sub-namespace V2. Planejo apenas depreciar, mas nunca remover os membros da V1, o que deve apoiar bem a compatibilidade com versões anteriores no futuro. Este é apenas um exemplo de uso "sã". Eu imagino que algumas pessoas vão diferir, mas como eu disse, é uma questão de opinião.

Big CodeBases precisarão. Veja o Boost para um exemplo. Eu não acho que alguém chamaria o código de impulso de 'insano'.

Se você considerar o fato de que, em um nível de hierarquia, as pessoas só poderão compreender em algum lugar mais ou menos na ordem de 10 itens, dois níveis apenas oferecem 100 no máximo. Um projeto suficientemente grande precisará de mais, portanto, pode facilmente acabar com 3 níveis de profundidade.

Trabalho no aplicativo XXX na minha empresa, e estou escrevendo um subsistema da GUI. Então eu uso aa :: xxx :: GUI como meu espaço para nome.

Você pode facilmente se encontrar em uma situação quando precisar de mais de um nível. Por exemplo, sua empresa possui um espaço de nome gigante para todo o seu código para separá -lo do código de terceiros, e você está escrevendo uma biblioteca que deseja colocar em seu próprio espaço para nome. Geralmente, sempre que você tem um sistema muito grande e complexo, que é dividido hierarquicamente, é razoável usar vários níveis de namespace.

Depende de suas necessidades e estilo de programação. Mas um dos benefícios de namespace é para ajudar a dividir o espaço do nome (daí o nome). Com um único espaço para nome, pois seu projeto é aumentos de tamanho e complexidade, o mesmo acontece com a probabilidade de colisão de nomes.

Se você está escrevendo código que deve ser compartilhado ou reutilizado, isso se torna ainda mais importante.

Eu concordo com as inscrições.A maioria das pessoas que usam vários níveis de namespaces (na minha experiência) vem de um ambiente Java ou .NET, onde o ruído é significativamente menor.Acho que bons prefixos de classe podem substituir vários níveis de namespaces.

Mas tenho visto um bom uso de vários níveis de namespace no boost (e em outras bibliotecas).Tudo está no namespace boost, mas as bibliotecas podem (encorajadas?) a estar em seu próprio namespace.Por exemplo - espaço para nome boost::this_thread.Permite coisas como...

boost::this_thread::get_id()
boost::this_thread::interruption_requested()

"this_thread" é ​​apenas um namespace para uma coleção de funções gratuitas.Você poderia fazer a mesma coisa com uma classe e funções estáticas (ou seja,a maneira Java de definir uma função livre), mas por que fazer algo não natural quando a linguagem tem uma maneira natural de fazer isso?

Basta olhar para a biblioteca da classe base .NET para ver uma hierarquia de namespace usada. Vai quatro ou cinco níveis em alguns lugares, mas principalmente são apenas dois ou três, e a organização é muito boa para encontrar coisas.

Quanto maior a base de código, maior a necessidade de namespaces hierárquicos. À medida que o seu projeto fica cada vez maior, você acha que precisa quebrá -lo de maneiras para facilitar a localização de coisas.

Por exemplo, atualmente usamos uma hierarquia de 2 níveis. No entanto, algumas das partes maiores que estamos falando agora sobre dividi -las em 3 níveis.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top