Pergunta

Pretendo desenvolver um sistema inteiramente baseado em módulos.A base do sistema deve ter suporte para conhecer plugins, iniciá-los e ser capaz de fornecer formas de comunicação entre esses módulos.Idealmente, deve-se ser capaz de inserir novos módulos e retirar módulos não utilizados à vontade, e os módulos devem ser capazes de usar a funcionalidade um do outro, se estiver disponível.

Este sistema deve ser usado como base para sistemas de simulação onde muitas coisas acontecem em módulos diferentes, e outros módulos podem querer fazer algo baseado nisso.

O sistema que pretendo desenvolver será em Java.A meu ver, pretendo ter uma pasta com uma subpasta para cada módulo que inclua um XML que descreva o módulo com informações como nome, talvez quais eventos ele pode gerar, coisas assim.Suponho que talvez precise escrever um ClassLoader personalizado para resolver isso.

O problema é que não sei se minha ideia realmente se sustenta e, claro, pretendo construir um protótipo funcional.No entanto, nunca trabalhei em um sistema verdadeiramente modular antes e não tenho certeza de qual é a melhor maneira de resolver esse problema.

Por onde devo começar?Existem problemas e armadilhas comuns encontrados durante o desenvolvimento desse tipo de sistema?Como faço para que os módulos conversem entre si enquanto mantenho o isolamento (ou seja, você remove um módulo e outro módulo que o estava usando permanece são)?Há algum guia, especificação ou artigo que eu possa ler que possa me dar algumas idéias sobre por onde começar?Seria melhor se fossem baseados em Java, mas isso não é um requisito, pois o que procuro agora são ideias e não código.

Qualquer feedback é apreciado.

Foi útil?

Solução

Você definitivamente deveria olhar OSGi.Tem como objetivo ser o mecanismo de componente/plugin para Java.Ele permite modularizar seu código (nos chamados pacotes) e atualizar pacotes em tempo de execução.Você também pode ocultar completamente os pacotes de implementação do acesso indesejado de outros pacotes, por exemplo.forneça apenas a API.

Eclipse foi o primeiro grande projeto de código aberto a implementar e usar OSGi, mas eles não o aproveitaram totalmente (sem instalações/atualizações de plugins sem reinicializações).Porém, se você começar do zero, terá uma estrutura muito boa para um sistema de plugins.

Apache Félix é uma implementação completa de código aberto (e há outras, como Eclipse Equinócio).

Outras dicas

Sem entrar em grandes detalhes, você deveria estar olhando Primavera e uma familiarização com as estruturas OSGI ou Eclipse RCP também fornecerá alguns conceitos fundamentais que você precisará manter em mente.

Outra opção é o Carregador de serviço adicionado em Java 1.6.

Existem muitas maneiras de fazer isso, mas algo simples pode ser usando o Reflection.Você escreve em seu arquivo XML o nome do arquivo (que seria uma classe na realidade).Você pode verificar de que tipo é e criá-lo de volta com reflexão.A classe pode ter uma interface comum que permitirá descobrir se o arquivo/classe externo é realmente um do seu módulo.Aqui estão algumas informações sobre Reflexão.

Você também pode usar uma estrutura pré-codificada como esta do SourceForgeTexto do link isso lhe dará um primeiro bom passo para criar um módulo/plugin.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top