Pergunta

Como você faz um Java modular aplicação desktop? Como devem os módulos ser classificados?

Foi útil?

Solução

Como meta design, meios de modularidade que deseja ter um aplicativo composto por partes separadas (módulos), onde cada parte tem a sua área de responsabilidade e contém todas as classes envolvidas com essa área (alta coesão ), e a comunicação entre as partes acontece através de interfaces estreitas, bem definidas e -documented ( solta acoplamento ).

Você conseguir isso, planejando seu projeto de antemão e ajustando os planse e refatoração do código constantemente durante a implementação.

É útil para fazer a diferença entre os módulos técnicos, tais como GUI, comunicação de rede ou acesso DB (que muitas vezes formam camadas, embora estes podem ser sub-dividido em vários módulos), e módulos de domínio que contêm a lógica de aplicação específica e muitas vezes não formam camadas.

Outras dicas

Tenha um olhar em tecnologias OSGi. Cada módulo de sua aplicação (chamado de pacote) é um frasco separado, e OSGi cuida de resolução de dependências e carregar dinamicamente pacote classpaths etc.

Para aplicativos de desktop Eu recomendaria fortemente olhando DA-Lançador de www.dynamicjava.org . Faz implantar seu aplicativo SOOO muito mais fácil. Eles também têm algumas coisas como JPA dinâmica que são úteis para qualquer aplicativo OSGi.

Você quer dizer modular como o Eclipse?

Se você basear seu aplicativo de desktop java no Eclipse RCP ou NetBeans RCP, você vai ter a modularidade "de graça" (quase; -))

A resposta à sua pergunta realmente depende do que você quis dizer com "modular" .

Existem vários níveis de preocupações que você deve considerar ao fazer sua modular aplicação.

Em primeiro lugar você deve considerar se a "modularidade" que você procura é modlarity arquitetura , deploymeyment tempo modularidade ou runtime modularidade .

Em qualquer caso todos os níveis consecutivos implica todos os níveis anteriores.

Para começar - para tornar a sua aplicação modular que você tem que começar a partir de arquitetura. Separar suas preocupações em partes cortadas limpas bem definidos que têm bem definidas as interfaces com o "mundo exterior". Use de bom padrões de design e injeção de dependência e design para unidade testability percorrer um longo caminho aqui no sentido de alcançar boa separação de preocupações que é a base do design modular.

Iniciar a partir pequeno, mas tenha em mente a imagem grande. Ao projetar pedaços um pouco maiores (ou módulos) de seu sistema verifique se eles têm tão poucas áreas de sobreposição possível. Cada módulo deve fazer quase nenhuma suposições sobre o ambiente em que correr e estar servindo apenas uma única preocupação. Todos os serviços de que necessita a partir dele de pares deve ser explicitamente fornecido pela inicialização externa (de preferência usando injecção dependência para colar os módulos em conjunto para uma aplicação de trabalho).

Se sua arquitetura é modular, é uma tarefa fácil para separar as preocupações em suas próprias unidades de implantação (em forma de projetos , frascos , pacotes , plug-ins , extensões ou qualquer outro) e você pode começar facilmente misturar e combinar vários módulos durante a implantação para obter o recurso exato definir o que precisa para o particular instância de aplicação. Isto é o que eu quero dizer com o tempo de implantação modularidade .

Indo um longo caminho no sentido de permitir a modularidade tempo de implantação são Dependency Injection frameworks como Guice , Primavera framefork e outros.

Runtime modularidade a maneira como vejo isso é algo parecido com a modularidade fornecido pelo Eclipse e NetBeans plugins ou extensões Mozilla onde você pode mudar a configuração e conjunto de seus módulos de aplicação após a implantação / instalação.

Isto implica algum tipo de arquitetura e infra-estrutura que reconhece novos plug-ins / extensões, quer em tempo de inicialização do aplicativo ou dinamicamente em tempo de execução.

também significa último que todos os seus módulos devem ser construídos com suposição implícita de que qualquer serviço que um módulo usos podem facilmente desaparecer a qualquer momento, fazer o esforço extra para garantir robustez do código em execução neste mundo volátil.

Eu também recomendaria Eclipse RCP ou ter um olhar para Netbeans RCP. Os dois são muito semelhantes. Uma coisa que os separa é que o Eclipse RCP usa bibliotecas GUI nativas em vez de balanço que usos do NetBeans.

Pros e contras é que Elcipse pode ser um pouco mais rápido do que você está mais limitado ao tipo de controla o sistema operacional oferece. Netbeans usos balanço que pode ser mais familiar para a maioria dos desenvolvedores Java e a capacidade de desenvolver controles personalizados são infinitas.

Sua sido um tempo desde que eu trabalhei com Eclipse RCP assim que eu sou provavelmente errado sobre o desenvolvimento de controles personalizados em Eclipse RCP.

A coisa que eles têm em comum é que o desenvolvimento de aplicativos de desktop inteligente e modular é divertido e você começa olhando profissional aplicativos em muito menos tempo!

Boa sorte!

Você também pode dar uma olhada no Java Plug-in Framework,

http://jpf.sourceforge.net/

JPF pode melhorar significativamente a modularidade e extensibilidade de seus sistemas Java e minimizar suporte e manutenção os custos.

ter uma chance com Primavera RCP

http://www.springsource.org/spring-rcp

quando organizando sua parte GUI de aplicação ...

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