Jump to content
softklin

Separar namespaces em várias DLLs

Recommended Posts

softklin

Olá pessoal. Ontem surgiu-me uma dúvida, e embora tenha procurado um bocado não consegui encontrar uma resposta que me satisfizesse. Primeiro, mostro-vos a minha ideia para saber se faz sentido:

vamos supor que estou a criar um conjunto de classes com funções bem definidas, separadas por namespaces, consoante a sua função, por exemplo, Utilitarios.Matematica, Utilitarios.IO, ..., tal como na .Net framework. Como estes componentes são de grandes dimensões, surgiu-me a ideia de poder separá-los em diferentes DLLs, para que um programador que apenas precise da parte de Matematica, não tenha de carregar também as outras dezenas de namespaces disponíveis. Ou seja, quero que cada um destes namespaces fique num DLL separado.

Primeiro, isto faz sentido? Em termos de footprint/tamanho da solução final, parece-me fazer sentido. Mas em termos de performance, também faz sentido? Se fizer sentido, e se for útil, como configurar o Visual Studio para essa tarefa?

Cumps.


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Share this post


Link to post
Share on other sites
petvetbr

Sim, faz sentido, porém é necessário certos cuidado em como fazer esta divisão.

A questão principal nestes casos é conseguir o equilíbrio entre a comodidade/modularidade das bibliotecas. A separação em dlls diferentes permite sim, que se diminua o espaço ocupado (tanto em disco, quanto RAM) caso o usuário não precise de todas as funcionalidades e pode trazer (uma pequena) vantagem em performance, mas é bem pequena, pois o sistema de acesso às funções de uma dll é bastante eficiente. Por outro lado, se a granularidade for muito pequena, você pode criar sua versão do "dll Hell", onde há muitas dlls e namespaces diferentes para o usuário coordenar e talvez não compense o pequeno ganho de performance/espaço.

Não faz sentido por exemplo se você tiver coisa de 50 métodos separá-los em várias dlls diferentes, se quiser deixar organizado, pode até separar por namespaces, porém pode colocar tudo no mesmo assembly. O próprio .NET separa as suas funções em grupos de dezenas/centenas de funções por dll.  Veja por exemplo, que o espaço ocupado em memória é equivalente ao espaço ocupado em disco + as estruturas criadas dinamicamente. Veja porém que é muito difícil uma dll .NET ter mais do que 500 KB de tamanho em disco, e exceto no caso do código criar estruturas de dados muito grandes na memória, este tamanho é quase irrelevante se levarmos em conta a quantidade de memória disponível nos computadores atualmente.

Quanto a configuração do Visual Studio, não tem muito segredo. Para cada .dll diferente, você deve criar um projeto novo do tipo Class Library. Para separar por Namespaces, basta mudar o namespace que aparece no inicio de cada arquivo .cs. Por padrão, a cada projeto criado, o Visual Studio aplica um namespace diferente, usando o nome do Projeto como base. Se quiser mudar isto é possível alterar o default namespace, na área Propriedades do seu projeto.


Fernando Lage Bastos - MCP/MCTS/MCPD

Share this post


Link to post
Share on other sites
softklin

Obrigado petvetbr, pela resposta. Quanto ao espaço em disco, já tinha essa ideia em mente, mas tinha dúvidas era sobre a otimização no acesso às DLLs e ao espaço ocupado em memória. Depois desta explicação, acho que apenas se justifica em projetos de grandes dimensões, como o caso da própria .Net Framework, em que cada classe tem um tamanho razoável e necessita de estar separado.

A questão do Visual Studio, realmente é bastante simples, mas como estava a pensar em criar um único projeto com objetivo de fazer a separação em diversos DLLs, nem me lembrei dessa possibilidade, que simplifica todo o processo, fazendo as configurações corretas. Estava a complicar o conceito.

Muito obrigado, a dúvida está resolvida! ;)


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Share this post


Link to post
Share on other sites
bruno1234

Eu normalmente separo os namespaces em DLLs apenas por reutilização.

Costumo pensar desta forma:

O namespace Utilitarios.Matematica é generico para qualquer aplicação ou é especifico para esta? Se é generico separo, se é especifico não vale a pena separar.

O Utilitarios.Matematica funciona sem o Utilitarios.IO? Se não funcionar, penso em colocá-los na mesma DLL, a menos que o Utilitarios.IO também seja genérico para qualquer aplicação, nesse caso também o separo.

Outra regra que costumo ter, é separar as DLLs de código de interface. Se decido que o utilitarios.Matematica é uma DLL então tem que funcionar independentemente da tecnologia do UI, seja ASP.net ou WPF (para poder ser incluído em qualquer um, se fazes sempre o mesmo tipo de aplicações, isto pode não ser um problema para ti).

Do ponto de vista de reutilização é bom ter cada funcionalidade na sua DLL, numa aplicação nova só uso o que quero.

Por outro lado, num projecto novo, é mais fácil incluir uma DLL do que 20.

Penso que deves fazer a escolha mais razoável para o teu caso.


Matraquilhos para Android.

Gratuito na Play Store.

https://play.google.com/store/apps/details?id=pt.bca.matraquilhos

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.