No .NET (Visual Studio), quando você cria um novo assembly?

9

Estou trabalhando em um aplicativo Silverlight. Dividi-o em várias montagens:

  • Domínio
  • Repositórios (tudo com persistência no banco de dados Sterling)
  • UI
  • ...

Foi assim que aprendi, mas me perguntei. Se você sabe que as DLLs não serão reutilizadas, é necessário dividi-las? Ou você pode colocar tudo em um assembly e usar pastas e espaços para nome para mantê-lo organizado?

Eu também vi projetos que têm muitas assembléias. Em vez de usar espaços para nome onde seria apropriado.

Então: quando você cria um novo assembly para algum novo pedaço de código? Algum bom recurso sobre este assunto? E você divide o código tecnicamente (domínio, dados, interface do usuário, etc.) e / ou funcionalmente (ou seja, administração do paciente, médico do paciente, logística do hospital, ... - provavelmente apenas para aplicativos de nível empresarial maiores)?

Peter
fonte

Respostas:

1

Eu recomendo criar assemblies separados para classes que logicamente se enquadram em "módulos". Isso não só é bom para reutilização e manutenção, mas também é uma maneira de impor a menor quantidade de dependências entre as classes.

A missão será minimizar o número de referências a outras montagens que cada montagem precisa, principalmente isso será feito por meio de interfaces e eventos. Ter aulas em assembléias diferentes tornará as dependências muito óbvias. Compare isso se você usar apenas um assembly, será muito fácil negligenciar o pensamento sobre dependências, pois tudo está acessível.

Claro que você não deve exagerar, mas separar, quando apropriado. Pense assim: "Essas classes pertencem uma à outra e não precisam saber sobre essas classes" e separam-se nesse sentido.

Homde
fonte
11
Depende do que você quer dizer com "módulos", mas normalmente divido a lógica relacionada usando namespaces em vez de assemblies. Lembre-se de que os namespaces podem abranger assemblies. Assemblies são a unidade de implantação e, portanto, você deve considerar cortar seus assemblies para corresponder ao seu cenário de implantação.
Ed Ed James
3
Não é uma boa ideia. O VS fica muito lento quando uma solução contém mais do que alguns projetos.
Nikie
4
Se o seu VS ficar muito lento, você está executando uma versão antiga ou um computador lento. Tenho grandes projetos com mais de 30 projetos que são compilados em segundos. Por outro lado, tenho muitos ram, núcleos e um SSD :) Você não deve exagerar, é claro, mas apenas separar, quando apropriado, pensar assim: "Essas classes pertencem uma à outra e não precisam saber sobre essas classes" e separar nesse sentido #
1133 Homde
Marcado como resposta por causa da observação sobre dependências. A resposta de Ed James é pelo menos tão valiosa e correta, mas essa resposta é mais aplicável à minha situação.
Peter
2
Seguindo esta abordagem, você pode acabar com um monte de montagens: A, B, C, D, E, F, G, H, I, J, K. Onde quer que você faz referência a montagem A, você também deve fazer referência a seus assemblies dependentes: B, C, D. Mas montagem Cé dependente: E, F, G, Hentão vamos precisar os demais. Portanto, sempre que você precisar de alguma função, precisará Aextrair 7 conjuntos adicionais para fazê-lo funcionar; certificando-se de obter as versões corretas de cada montagem. Bem-vindo à nova DLL Hell.
Ed James
14

Um assembly é a unidade de implantação de um aplicativo .NET; portanto, considere combinar o corte de seus assemblies com sua arquitetura de implantação.

Os assemblies também são úteis quando você precisa de controle de versão separado em algum código. Por exemplo, quando você possui interfaces comuns que se beneficiariam do controle de versão independente, você deve separar esse código em um assembly.

Lembre-se de que os espaços para nome podem abranger assemblies. Em muitos casos, basta separar o comportamento usando namespaces. Observe o .NET mscorlib.dllque, em um único assembly, contém código que cobre uma grande variedade de comportamentos separados apenas pelo espaço para nome.

Se você quiser alguma autoridade sobre esse assunto, não procure mais:

Diretrizes de projeto de estrutura

Diretrizes de design da estrutura: convenções, expressões idiomáticas e padrões para bibliotecas .NET reutilizáveis ​​(2ª edição) por Krzysztof Cwalina e Brad Abrams.

Ed James
fonte
Obrigado pela referência do livro, de fato. Vou verificar isso. Você poderia elaborar a arquitetura de implantação? Como a implantação de 10 arquivos DLL difere da implantação de 1? A menos que você consiga atualizar um dos dez arquivos, enquanto os outros permanecem intocados?
Peter Peter
11
@ Peter: se você codificasse 10 assemblies que sempre são implantados juntos, poderia ter simplificado o controle e a implantação da versão colocando todo o código em um único assembly. Se as 10 montagens nem sempre forem implantadas juntas, ter montagens separadas pode ser útil.
Ed James