Sistema Modular

Olá Pessoal,

Tudo bem? Gostaria da opinião de vocês sobre uma coisa. Em uma empresa, onde existe um sistema para cada departamento, acho que uma boa solução seria um único sistema integrando todos os setores mas de forma modularizada.  Pensei em um sistema web java, onde eu teria jsp, servlet, spring... ou seja, tecnologias web, e módulos acoplados a esse sistemas através de arquivos .jar, onde eu teria todas as regras de negócio de minha aplicação nesse arquivo .jar, dessa forma:

Pensei nisso pelos seguintes motivos:

  1. A manutenção fica mais simplificada, pois toda a camada web é única para todos os sistemas;
  2. Defino um padrão de interface para toda a empresa, ou seja, o usuário não precisa ficar se acostumar com várias interfaces;
  3. O desenvolvimento de um novo módulo também fica mais fácil, pois toda a configuração web está no projeto web e não no módulo;
  4. Se eu quiser mudar a interface de um único módulo, posso fazer isso facilmente, pois teria a regra de negócio modularizada em um arquivo .jar;
    5…

Gostaria da opinião de vocês sobre isso, seria uma boa solução?

Penso que esse modelo pode funcionar bem dependo do resultado esperado. Se você esta pensando em velocidade de desenvolvimento através da montagem de um framework, acredito que seja melhor você mudar o modelo. Não pense nos módulos como departamentos, mas sim em áreas de negócio onde estes módulos terão uma pacote base que possuirá os serviços (Interfaces) e os serviceLocators. O uso de CDI do spring ajudaria muito juntamente com o uso de interceptors para POA quando necessário. Se for modularidade analise OSGi pois permite um isolamento entre os bundles. Mas você vai perder um pouco de velocidade de desenvolvimento e poder de DEBUG.

abs

[quote=anderson_lr]Olá Pessoal,

Tudo bem? Gostaria da opinião de vocês sobre uma coisa. Em uma empresa, onde existe um sistema para cada departamento, acho que uma boa solução seria um único sistema integrando todos os setores mas de forma modularizada.  Pensei em um sistema web java, onde eu teria jsp, servlet, spring... ou seja, tecnologias web, e módulos acoplados a esse sistemas através de arquivos .jar, onde eu teria todas as regras de negócio de minha aplicação nesse arquivo .jar, dessa forma:

Gostaria da opinião de vocês sobre isso, seria uma boa solução?[/quote]

Eu já vi essa ideia antes. Bancos adoram usá-la. O problema é que a tecnologia web é a mesma (ou pode ser a mesma) mas a implementação não.
Ou seja, cria-se um sistema onde se faz o login e ha os menus. Ai cada menu aponta um sistema em um contexto web. É uma zona.

Não ha qualquer necessidade de usar modulos fisicos. Os modulos são construtos abstratos que podem fácilmente emulados via permissões de acesso.

Agora, se vc quer realmente modulos fisicos, então tem que fazer com OSGi ( poderia esperar pelo java 9 para os modulos java, mas não é uma aposta viável).
O OSGi realmente controla os modulos como deve ser controlando dependencias, classloaders etc… só que neste caso o web container e o ejb container também são modulos. O Glassfish usa esta arquitetura e talvez (não tenho a certeza) seja um boa base.

Eu por mim, não criaria modulos dessa forma.

anderson,

o que acha de usar JMS ou REST para integrar os seus sistemas?

exponha uma interface para os seus serviços falarem REST ou WebService e continue com a implementação do jeito que está…

abs

Obrigado pelas idéias aí pessoal, só esqueci de comentar que irei começar o desenvolvimento desses sistemas do zero. Integrando todos os departamentos.

Para isso, eu oriento o uso de EJB. Aí você tem toda lógica de qualquer módulo em um único local e, melhor ainda, disponível na web ou localmente, através de EJB remoto.

Acho que pode ser o inicio de uma boa solução.

Ao observar o seu diagrama e suas descrições me veio a seguinte ideia: Será que se você adicionasse mais uma máquina servidora e fizesse um balanceamento das requisições não ajudaria na hora de fazer as atualizações das versões e, obviamente, aumentaria a disponibilidade já que você também centralizou os grupos distintos de usuários?

flws

Acho a ideia de módulos interessante.

A questão é, a forma com que você vai isolar esses módulos - esse é o grande valor. Porque se você não souber fazer isso, será como pegar o tamanho da aplicação e dividir pelo número de “módulos”; ou seja, os módulos são somente jar’s, e não peças isoladas com o mínimo de acoplamento possível facilitando manutenção e evolução, e outros xxxsão.

Outra questão importante é que sempre existirá um “core”, um módulo central que oferecerá suporte para o acoplamento de outros módulos e também fornece recursos para o funcionamento desses outros módulos. Se esse core também não for bem desenhado, corre o risco dos outros módulos ficarem “inchados” porque o core não faz o que deveria fazer.

Isso é bem mais comum em sistemas PHP de gerenciamento de conteúdo, como Drupal, Joomla, Wordpress… e a arquitetura que se usa normalmente é um core como eu falei, com interfaces que “dizem” quais eventos o core disponibiliza para os demais módulos, e como eles podem utilizar esses eventos.

Um sistema modular de verdade deve ser show, mas há uma pitada considerável de complexidade no desenvolvimento.

Editado:
Outra coisa importante que esqueci de citar: reuso. Se não for com esse propósito, acho pouco útil criar módulos.