Estrutura de diretório para uma solução .NET

16

Recentemente, tivemos uma visita de empreiteiro que questionou nossa metodologia de estruturação de projetos. Observe que estou me referindo especificamente à estrutura de diretórios. Ele sugeriu o uso das diretrizes da Microsoft. Eu pensei que seria capaz de pesquisar no Google "estrutura de diretórios do projeto .NET das diretrizes da Microsoft" e encontrar algo útil, mas isso não provou ser esse o caso. Tal como está, fazemos algo parecido com isto:

[Company.System.Feature]
  |-doc
     |Sandcastle project
  |-lib
     |Nuget packages
  |-src
    |-Project1 e.g. web
    |-Project2 e.g. business logic
    |-UnittestProject1
    |-Specs

A pasta doc contém uma solução Sandcastle como a descrita aqui: https://www.codeproject.com/Articles/15176/Sandcastle-Help-File-Builder (consulte: caminhos absolutos e relativos). Portanto, a pasta doc contém uma pasta Help, que contém o arquivo de ajuda gerado. A pasta lib contém todos os pacotes Nuget.

Existem diretrizes da Microsoft que recomendam como estruturar uma solução? Eu procurei aqui: /programming/789389/project-structure-for-c-sharp-development-effort/789554?noredirect=1#comment86756309_789554 entre outros lugares. A maioria dos artigos e perguntas que li parecem ter sido criados em 2007-2009. Acredito que o Nuget foi introduzido em 2010. Existem diretrizes da Microsoft? Eu li sobre algo chamado Tree Surgeon, no entanto, isso parece não existir mais: https://archive.codeplex.com/?p=treesurgeon .

Eu estou usando o TFS; Cruise Control e DDD é que faz alguma diferença.

w0051977
fonte
4
As estruturas de diretório são uma questão de gosto. Use a estrutura de pastas que indica mais claramente as intenções do seu projeto / organização.
21818 Robert Harvey
5
Além disso, na próxima vez que alguém disser que você deve seguir as "Diretrizes da Microsoft" sobre algo, peça à pessoa que forneça essas diretrizes ou mostre onde você pode encontrá-las. Caso contrário, é um conselho inútil.
21719 Robert Harvey
2
um pouco de adivinhação está colocando pacotes NuGet em lib em vez de pacotes
Ewan
1
@Ewan, pacotes de nuget nem pertencem packagesmais, para projetos no estilo dotnetcore e VS2017. Eles agora vivem nos objdiretórios dos projetos .
David Arno
2
pff! atualizando?!?!? Soa como ele pode quebrar coisas
Ewan

Respostas:

20

No MSDN, existem algumas diretrizes oficiais muito antigas . Estes estão desatualizados. Como a página diz: " Este conteúdo está desatualizado e não está mais sendo mantido. É fornecido como cortesia para as pessoas que ainda estão usando essas tecnologias " . Portanto, recomendo que você evite essas diretrizes.

Houve uma tentativa de definir uma estrutura de solução comum por meio do Project Scaffold . Isso é mais orientado para o F #, em vez do C #. Na verdade, não decolou e há poucos sinais de desenvolvimento das idéias nos dias de hoje.

O conjunto de diretrizes mais ativo e atualizado é mantido por David Fowler, desenvolvedor da Microsoft na equipe do ASP.NET. Essas diretrizes são usadas por muitos na Microsoft, incluindo as equipes do Roslyn (o compilador C # e VB.Net). Você poderia fazer muito pior do que adotar essa abordagem, portanto.

David Arno
fonte
Vi os dois primeiros links, mas não o terceiro. +1 para o terceiro link. Colocaria meu projeto inteiro do Sandcastle na pasta docs ou apenas nos arquivos de Ajuda gerados pelo projeto Sandcastle? Não tenho certeza por que essa resposta foi votada abaixo.
W0051977
1
Para ser justo, todas as páginas que não estão incluídas no novo sistema de documentação da Microsoft são estampadas com as palavras "este conteúdo está desatualizado e não está mais sendo mantido". Isso não significa que não há informações úteis lá.
21818 Robert Harvey
Você colocaria as especificações? Na pasta Testes ou em um diretório chamado Especificações (no mesmo diretório da pasta src)? Eu acho que isso realmente não importa muito.
precisa saber é o seguinte
@RobertHarvey: É justo, mas referir-se a essa página por si só e sem mais nada para fazer backup também não é um motivo para alterar a estrutura da pasta do projeto, se uma já tiver sido estabelecida.
Flater
Você pode ver as diretrizes de David Fowlers na prática na maioria dos projetos de código aberto no GitHub, por exemplo, Enity Framework .
Pfx 26/05