Pergunta

Devem as pastas em uma solução de coincidir com o espaço de nomes?

Em uma de minhas equipes de projetos, temos uma biblioteca de classes que tem muitas sub-pastas no projeto.

Nome do projecto e o espaço de nomes: MyCompany.Project.Section.

Dentro deste projeto, existem várias pastas que correspondem a seção de espaço para nome:

  • Pasta Vehicles tem aulas no MyCompany.Project.Section.Vehicles espaço de nomes
  • Pasta Clothing tem aulas noMyCompany.Project.Section.Clothing espaço de nomes
  • etc.

Dentro deste mesmo projeto, é outro falso pasta

  • Pasta BusinessObjects tem aulas no MyCompany.Project.Section espaço de nomes

Há alguns casos como esse, em que as pastas são feitas para "organizacional conveniência".

A minha pergunta é:Qual é o padrão?Em bibliotecas de classe fazer as pastas normalmente coincidir com a estrutura de espaço para nome ou é um saco de gatos?

Foi útil?

Solução

Além disso, observe que se você usar o built-in modelos de adicionar classes para uma pasta, irá por predefinição, ser colocado em um espaço de nomes, que reflete a hierarquia de pasta.

As aulas serão mais fáceis de encontrar e que só devem ser razões boas o suficiente.

As regras que se seguem são:

  • Projeto/nome do assembly é a mesma que a raiz de espaço de nomes, exceto o .dll final
  • Única exceção para a regra acima é um projeto com um .Núcleo de final, a .O núcleo é retirado
  • Pastas é igual a espaços de nomes
  • Um tipo por arquivo (class, struct, enum, delegado, etc.) torna mais fácil para encontrar o arquivo certo

Outras dicas

Não.

Eu tentei os dois métodos em pequenas e grandes projetos, tanto com o único (me) e uma equipe de desenvolvedores.

Achei mais simples e mais produtiva rota era ter um espaço de nomes único por projeto, e todas as classes de ir para o espaço.Você está livre para colocar os arquivos de classe em qualquer projeto de pastas que você deseja.Não há nenhuma complicação adicionando instruções using no topo de arquivos o tempo todo, como só existe um único espaço de nomes.

É importante organizar os arquivos em pastas e, na minha opinião, que todas as pastas deve ser usado para.A exigência de que estas pastas também mapa para espaços de nomes, é desnecessário, cria mais trabalho, e eu encontrei foi, na verdade, prejudicial para a organização, porque o ônus adicional incentiva a desorganização.

Tome este o FxCop de aviso, por exemplo:

CA1020:Evitar espaços de alguns tipos de
causa:Um espaço de nomes diferente do espaço de nomes global contém menos de cinco tipos de https://msdn.microsoft.com/en-gb/library/ms182130.aspx

Este aviso incentiva o dumping de novos arquivos em um Projeto genérico.Pasta geral, ou mesmo a raiz do projeto até ter quatro aulas semelhantes para justificar a criação de uma nova pasta.Será que isso pode acontecer?

A Localização De Arquivos

Aceito resposta diz que "As aulas serão mais fáceis de encontrar e que só devem ser razões boas o suficiente."

Eu suspeito de que a resposta está se referindo a existência de vários espaços de nomes em um projeto que não mapeiam a estrutura da pasta, em vez do que o que eu estou sugerindo que é um projeto com um único namespace.

Em qualquer caso, enquanto você não pode determinar qual pasta um arquivo de classe é a partir do espaço de nomes, você pode encontrá-lo, usando de Ir Para a Definição ou a solução de pesquisa explorer caixa no Visual Studio.Também isso não é realmente um grande problema na minha opinião.Eu não gastar até 0,1% do meu tempo de desenvolvimento sobre o problema de localização de arquivos para justificar a otimização da ti.

Nome confrontos

Com certeza a criação de múltiplos espaços de nomes permite que o project temos duas classes com o mesmo nome.Mas é realmente uma coisa boa?É talvez mais fácil simplesmente impedir que sejam possíveis?Permitindo que duas classes com o mesmo nome cria uma situação mais complexa, onde 90% do tempo as coisas funcionam de uma certa maneira e, em seguida, de repente, você descobre que você tem um caso especial.Digamos que você tenha dois Retângulo classes definidas em separado espaços de nomes:

  • classe de Projeto1.Imagem.Retângulo
  • classe de Projeto1.Janela.Retângulo

É possível bater um problema que um arquivo de origem tem de incluir espaços de nomes.Agora você tem que escrever o espaço para nome completo em todos os lugares em que arquivo:

var rectangle = new Project1.Window.Rectangle();

Ou confusão com alguns desagradáveis utilizando a instrução:

using Rectangle = Project1.Window.Rectangle;

Com um único espaço de nomes em seu projeto, você é forçado a vir para cima com o diferente, e eu diria mais descritivo, nomes como esta:

  • classe de Projeto1.ImageRectangle
  • classe de Projeto1.WindowRectangle

E o uso é o mesmo em qualquer lugar, você não precisa lidar com um caso especial quando utiliza um ficheiro de ambos os tipos.

instruções de utilização

using Project1.General;  
using Project1.Image;  
using Project1.Window;  
using Project1.Window.Controls;  
using Project1.Shapes;  
using Project1.Input;  
using Project1.Data;  

vs

using Project1;

A facilidade de não ter que adicionar espaços de nomes o tempo todo ao escrever o código.Não é o tempo que leva, realmente, a quebra no fluxo de ter que fazê-lo e só preencher o backup de arquivos com muitas instruções de utilização - para quê?Será que vale a pena?

Projeto de mudança de estrutura da pasta

Se as pastas são mapeados para espaços de nomes, em seguida, o projeto caminho da pasta é efetivamente embutida em cada arquivo de origem.Isso significa mudar o nome ou mover um ficheiro ou pasta no projeto requer o conteúdo do arquivo real para a mudança.Tanto a declaração de espaço de nomes de ficheiros nessa pasta e usando instruções em um monte de outros arquivos que fazem referência a classes em que pasta.Enquanto as alterações são, em si trivial com ferramentas, geralmente resulta em uma grande confirmação composto de muitos arquivos cujas aulas ainda não mudou.

Com um único espaço de nomes no projeto que pode mudar a estrutura de pasta de projeto, no entanto, você deseja, sem qualquer fonte de arquivos sendo modificados.

O Visual Studio automaticamente mapeia o espaço de nomes de um novo arquivo para a pasta de projecto que é criado no

Lamentável, mas acho que o incômodo de corrigir o namespace é menor do que o aborrecimento de lidar com eles.Também tenho o hábito de copiar colar um arquivo existente ao invés de usar Adicionar->Novo.

O Intellisense e Objeto Navegador

O maior benefício na minha opinião, de uso de múltiplos espaços de nomes em projetos de grande porte está tendo extra organização quando visualizar as classes em qualquer de ferramentas que exibe classes em uma hierarquia de espaços de nomes.Mesmo a documentação.Obviamente, ter apenas um espaço de nomes nos resultados do projeto em todas as aulas, a ser apresentada em uma única lista, ao invés de incluir divididos em categorias.No entanto, pessoalmente, nunca tenha sido perdido ou atrasado por causa de uma falta isso para eu não achar que é uma grande vantagem para justificar a múltiplos espaços de nomes.

Apesar de que se eu fosse escrever um grande público de biblioteca de classe, em seguida, eu gostaria de provavelmente, o uso de múltiplos espaços de nomes no projeto para que a assembléia parecia arrumado no ferramental e documentação.

Eu acho que o padrão, dentro .NET, é tentar fazê-lo quando possível, mas não para criar desnecessariamente estruturas profundas, apenas para aderir a ela, como uma regra inflexível.Nenhum dos meus projetos siga o namespace == estrutura regra 100% do tempo, às vezes é apenas mais limpo e melhor para sair de tais regras.

Em Java, você não tem escolha.Eu chamaria de que um caso clássico do que funciona na teoria vs o que funciona na prática.

@lassevk:Eu concordo com essas regras, e tem mais a acrescentar.

Quando eu classes aninhadas, eu ainda dividi-los, um por arquivo.Como esta:

// ----- Foo.cs
partial class Foo
{
    // Foo implementation here
}

e

// ----- Foo.Bar.cs
partial class Foo
{
    class Bar
    {
        // Foo.Bar implementation here
    }
}

Eu diria que sim.

Primeiro, vai ser mais fácil de encontrar o real ficheiros de código a seguir para baixo os espaços de nomes (por exemplo, quando alguém de e-mails que você nua exceção de pilha de chamada).Se você deixar suas pastas ir fora de sincronia com espaços de nomes, localização de arquivos no big antigo torna-se ficar cansativo.

Segundo, VS vai gerar novas classes que você cria em pastas com o mesmo espaço de nomes de seu pai a estrutura de pasta.Se você decidir nadar contra isso, ele vai ser só mais um trabalho de canalização para fazer diariamente quando a adição de novos arquivos.

É claro, isto vai sem dizer que deve-se ser conservador sobre o quão profundo xis pasta/hierarquia de namespace vai.

Sim, eles devem, só gera confusão em contrário.

Qual é o padrão?

Não há nenhum padrão oficial, mas convencionalmente a pasta-para-mapeamento de namespace padrão é o mais amplamente utilizado.

Em bibliotecas de classe fazer as pastas normalmente coincidir com o espaço de nomes estrutura ou é um saco de gatos?

Sim, na maioria das bibliotecas de classe as pastas de correspondência de espaço de nomes para o organizacional facilidade.

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