Array
(
)

Modularizar um Sistema

William Maximo
|
MVP
    15 abr 2014

Boa tarde.
Trabalho com Visual Studio utilizando VB.Net com linguagem e possuo um software, mas que infelizmente não foi desenvolvido sobre nenhuma arquitetura.
Todos os recursos estão embutidos no exe e gostaria de saber uma maneira de poder modularizar o sistema, para evitar de sempre que precisar atualizar algum recurso, tem que recompilar a Solution inteira. Estou querendo mudar para ter a opção de oferecer para determinados clientes somente alguns recursos, como controle de cliente, controle de fornecedor, controle de produto, e assim por diante. Outra duvida também é relação a ter mais de uma interface para um mesmo controle, caso a atual satisfaça as necessidades do meu cliente, como eu poderia ter mais de um Controle de Cliente dentro da Solution, para alterar elas para o cliente.
Desde já agradeço.

Alex Lekao
   - 15 abr 2014

Oi Willian,

Eu nao trabalho com programacao, mas o que eu tenho visto pelas empresas de software que ja trabalhei eh que o software para cadastros eh unico, e todo os clientes terao o mesmo.

E os demais modulos sao de acordo com cada perfil de cliente.

Nao sei se seria especificamente isso que vc estava querendo, mas o q eu ja vi e que pode ser o ideal para o caso.

Em uma das software houses que trabalhei o cadastro era realmente um para todos inclusive as versoes Light do sistema, porque caso o cliente resolvesse migrar para uma versao mais robusta, os campos ja poderiam estar preenchido com parametrizacoes que talvez nao precisem ser retrainadas caso acontecesse a mudanca.

Espero ter ajudado.

Abraco.

Alex - Lekao

William Maximo
|
MVP
    15 abr 2014

Então, acontece que hoje por exemplo, tenho dois clientes, que no caso um trabalha com uma transportadora e o cadastro de cliente possui informações diferentes do outro cliente, que trabalha com venda de materiais elétricos.
Neste caso, fica complicado oferecer as mesmas informações para ambos, pois os campos utilizados por um, não são aproveitados por outros.

Joel Rodrigues
   - 23 abr 2014

Você pode dividir o sistema em vários projetos. No Visual Studio, você criaria uma Solution pricipal e dentro dela adicionaria os Projects referentes a cada módulo. A aplicação principal pode ter apenas um form onde ficarão os menus para os demais forms, que estarão contidos em Class Libraries (DLL's).
Dessa forma, se você precisar alterar apenas um form, por exemplo, basta recompilar a DLL onde ele está contido e substituir no cliente, sem alterar as demais partes do projeto.
Existe ainda uma forma de deixar isso ainda mais dinâmico, que seria utilizando Reflection para ler cada DLL e criar um item no menu principal para cada form contido nelas. Essa é uma abordagem mais complexa, mas perfeitamente factível.

William Maximo
|
MVP
    28 abr 2014


Citação:
Você pode dividir o sistema em vários projetos. No Visual Studio, você criaria uma Solution pricipal e dentro dela adicionaria os Projects referentes a cada módulo. A aplicação principal pode ter apenas um form onde ficarão os menus para os demais forms, que estarão contidos em Class Libraries (DLL's).
Dessa forma, se você precisar alterar apenas um form, por exemplo, basta recompilar a DLL onde ele está contido e substituir no cliente, sem alterar as demais partes do projeto.
Existe ainda uma forma de deixar isso ainda mais dinâmico, que seria utilizando Reflection para ler cada DLL e criar um item no menu principal para cada form contido nelas. Essa é uma abordagem mais complexa, mas perfeitamente factível.


Obrigado pela resposta.

Eu estava pesquisando a respeito de usar as Class Libraries, e referencia-las no projeto principal, o único ponto é que não consegui encontrar um método para centralizar as DLL numa pasta só, tipo >arquivos de programa > meu software > DLL.

Usando a Reflection é possível centraliza-las, mas agora não me recordo o problema que encontrei ao tentar fazer isso.

Alex Lekao
   - 28 abr 2014

O que eu ja vi em algumas empresas de software, eh que eles colocam os campos, se nao foram utilizados o cara "simplesmente ignora". rsrsrs

uma outra coisa, que acredito que esteja englobado no que o Joel esta sugerindo, eh vc trabalhar com tipo de cliente seu, no caso dos clientes que foram do mesmo ramo, durante a compilacao ativa os campos no formulario e os que forem de outro tipo, ativa os campos para aquele nicho, nao sei se seria isso o ideal, mas ja vi fazerem assim tbm em uma Software house que trabalhei a alguns anos atraz. rsrsr

Abraco.

Alex - Lekao

Citação:
Então, acontece que hoje por exemplo, tenho dois clientes, que no caso um trabalha com uma transportadora e o cadastro de cliente possui informações diferentes do outro cliente, que trabalha com venda de materiais elétricos.
Neste caso, fica complicado oferecer as mesmas informações para ambos, pois os campos utilizados por um, não são aproveitados por outros.

William Maximo
|
MVP
    19 mai 2014


Citação:
O que eu ja vi em algumas empresas de software, eh que eles colocam os campos, se nao foram utilizados o cara "simplesmente ignora". rsrsrs

uma outra coisa, que acredito que esteja englobado no que o Joel esta sugerindo, eh vc trabalhar com tipo de cliente seu, no caso dos clientes que foram do mesmo ramo, durante a compilacao ativa os campos no formulario e os que forem de outro tipo, ativa os campos para aquele nicho, nao sei se seria isso o ideal, mas ja vi fazerem assim tbm em uma Software house que trabalhei a alguns anos atraz. rsrsr

Abraco.

Alex - Lekao

Citação:
Então, acontece que hoje por exemplo, tenho dois clientes, que no caso um trabalha com uma transportadora e o cadastro de cliente possui informações diferentes do outro cliente, que trabalha com venda de materiais elétricos.
Neste caso, fica complicado oferecer as mesmas informações para ambos, pois os campos utilizados por um, não são aproveitados por outros.


Eu vou utilizar DLL para separar o sistema em módulos.
Futuramente posto aqui o resultado, para dizer se facilitou ou dificultou o sistema.
Obrigado.