Usando MVC em um aplicativo Java

10

Preciso escrever um aplicativo GUI de plataforma cruzada para processar (em vários threads) e visualizar quantidades bastante grandes de dados. Idealmente, o aplicativo deve ser relativamente rápido e ter boa aparência.

A interface do aplicativo consistirá em um widget de tabela, um widget de árvore e um widget de desenho de figura personalizado. O usuário poderá modificar os dados de qualquer um desses widgets e as alterações deverão ser refletidas imediatamente nos outros widgets.

Naturalmente, estou planejando usar o MVC. No entanto, normalmente faço toda a minha programação GUI em C ++ / Qt e tenho uma exposição muito limitada ao Java. Então, eu realmente aprecio qualquer conselho sobre como organizar esse aplicativo em Java. Em particular, devo usar o Swing ou JavaFX? Quais widgets você escolheria para o trabalho? Você poderia recomendar livros / tutoriais on-line que abordem esses aspectos da plataforma Java?

Eu aprecio muito qualquer feedback. Obrigado!

(esta pergunta foi publicada originalmente no Stack Overflow , mas este site foi sugerido como um local mais apropriado para perguntar)

egor
fonte

Respostas:

21

Tudo isso é muito subjetivo, pois várias tecnologias diferentes poderão atender às suas necessidades.

Como outros, provavelmente recomendarei a tecnologia que eu pessoalmente prefiro para um projeto como esse, que seria o JavaFX .

Os motivos pelos quais eu recomendaria o JavaFX são:

OK, acho que o exposto acima é um pouco tangente, mas eu gosto de promover o JavaFX ;-)

De qualquer forma, para abordar os pontos específicos da sua pergunta:

  • JavaFX é uma estrutura de GUI de plataforma cruzada (atualmente Mac / Windows / Linux).
  • O JavaFX possui suporte de encadeamento múltiplo de alta qualidade e embutido (a estrutura principal em si é de encadeamento único, como quase todas as outras plataformas GUI existentes, mas você pode definir suas próprias tarefas a serem executadas simultaneamente ao encadeamento da GUI, para que o encadeamento da GUI permaneça responsivo).
  • Um programa JavaFX bem escrito não deve apresentar problemas com desempenho suficiente para visualizar quantidades razoavelmente grandes de dados. Aqui está um projeto JavaFX de amostra que faz isso.
  • A capacidade de estilizar o aplicativo via css, fazer uso de efeitos visuais e animação, permite que você trabalhe com designers para deixar seu aplicativo com ótima aparência ou faça você mesmo se você tiver as habilidades necessárias.
  • O JavaFX possui um TableView e um TreeView que você pode usar. Há também um controle TreeTable combinado que foi desenvolvido em preparação para a liberação do Java 8 .
  • O widget de desenho de figura personalizado pode usar formas de gráfico de cena ou uma tela de desenho direto - é realmente apenas uma questão de estilo e preferência de codificação.
  • As propriedades e os recursos de ligação do JavaFX, juntamente com suas estruturas de ouvinte de eventos, tornam trivial a modificação de dados usando um controle e as alterações imediatamente refletidas em outros controles.
  • Para o desenvolvimento do estilo MVC, você pode escrever seu modelo usando objetos java simples, definir sua visualização usando a linguagem de marcação FXML (criada usando a ferramenta de layout gráfico SceneBuilder, se desejar) e definir sua lógica de controle em Java (ou outra linguagem de script, se preferir) , além disso, você deve separar seu estilo da sua lógica usando CSS.
  • Como você tem uma exposição limitada ao Java, a curva de aprendizado será significativa. Existem excelentes tutoriais sobre Java , além dos tutoriais sobre JavaFX aos quais vinculei anteriormente, que podem ajudar nisso. O código principal do JavaFX usa apenas os recursos disponíveis no JDK; portanto, para usar o JavaFX, você não precisa aprender muitas bibliotecas e estruturas adicionais (como faria se estivesse aprendendo o JavaEE, por exemplo). Portanto, esses dois sites de tuotorial fornecem a maioria das informações necessárias para você se atualizar.
  • Para a organização do aplicativo, se você possui um aplicativo complexo e precisa do suporte de uma estrutura de aplicativo cliente completa e comprovada e não se importa em aprender muito, pode incorporar o JavaFX no Eclipse RCP ou no NetBeans RCP , que, de acordo com nas páginas deles pode economizar anos de tempo de desenvolvimento. Eu recomendaria apenas olhar para essas plataformas se suas necessidades o justificarem, porque para projetos de pequeno a médio porte, provavelmente será mais simples codificar as coisas diretamente no JavaFX sem as estruturas complexas da plataforma do cliente, como Eclipse e NetBeans.
  • Quanto a saber se você deve usar o Swing ou o JavaFX, não sou a pessoa mais objetiva para responder a isso. O JavaFX definitivamente possui deficiências que se tornariam aparentes para você quando você começar a usá-lo (como o Swing).
  • Para tutoriais online, vinculei-me aos mais relevantes. Há um bom tutorial para um aplicativo completo .
  • Os livros Pro JavaFX 2 e JavaFX 2.0 Introduction by Example são altamente cotados.
jewelsea
fonte
Obrigado por esta resposta incrível! O JavaFX com certeza soa como uma plataforma agradável e definitivamente vou investir muito tempo nela. Além disso, os dois livros que você recomendou estão disponíveis na minha biblioteca :)
egor
11
Esse link "melhores IDEs do mundo" deve realmente apenas apontar para o IntelliJ IDEA;) Ótima resposta, muito informativa, obrigado!
24412 Cooper
11
Deve-se notar que o JavaFX atualmente não possui nenhum suporte à acessibilidade. Isso pode ser um fator decisivo para alguns (foi para mim) e terá que continuar a usar o Swing.
Cooper
O JavaFX agora oferece suporte à acessibilidade. Essa funcionalidade foi entregue no Java 8u40, para o qual o JEP 204: JavaFX Accessibility foi implementado.
Jewelsea
5

Vá com um padrão Model-view-apresentador . Você pode ver um bom exemplo de MVP no Swing aqui, através do projeto mvp4j .

Embora não seja o Swing, também verificaria os artigos do MVP no site da GWT Google Developers para obter mais informações sobre esse padrão e como aplicá-lo em Java; os mesmos princípios de design permanecem, independentemente da estrutura e o GWT é muito semelhante ao Swing.

Uma rápida descrição de como o MVP funciona:

  • Exibição : Uma classe que contém estritamente seus componentes da GUI. Sem conhecimento de lógica ou modelo, nem mesmo manipuladores de eventos. Isso torna as visualizações muito idiotas, mas muito descartáveis ​​e mutáveis.
  • Apresentador : Uma classe que lida com a lógica do seu aplicativo. Um apresentador ligará a uma (ou mais) classes de exibição e manipulará toda a lógica de aplicativo e controle de modelo necessários.
  • Modelo : seus objetos de modelo de dados. É melhor mantê-los o mais parecido com o POJO possível (objetos java antigos simples).

Quando implementado corretamente, o MVP tornará seu aplicativo muito dissociado e permitirá que você faça modificações sem perturbar outras áreas do seu aplicativo.

Editar: com base na sua decisão de usar o JavaFX, recomendo verificar os seguintes artigos

Tanoeiro
fonte
Obrigado! Acho que decidi usar o JavaFX, mas vou ler sobre o MVP e como ele pode ser usado com esta plataforma.
egor 24/12/12
11
Ótimo! Se você decidir usar o padrão MVP, aqui está um link que fornece um exemplo no código JavaFX.google.com/p/pennychecker-presenter/wiki/JavaFxMvpExample
Cooper
2

Os widgets necessários podem ser encontrados no Swing ou no SWT . A documentação contém exemplos de componentes (Swing) ou widgets (SWT), portanto será fácil identificá-los.

O Swing é uma biblioteca GUI incluída no JDK e construída do zero. O SWT é externo e os componentes são baseados nos nativos.

Quanto ao MVC, os dois têm suporte para isso. No Swing, você tem um modelo para cada componente que praticamente fornece os dados subjacentes. O componente em si é o View e o Controller.

Adrian Ber
fonte