Economize memória com o padrão Flyweight

Quando desenvolvemos jogos é muito comum termos diversas entidades do mesmo tipo em um cenário, como inimigos, projéteis, nuvens, efeitos etc. Criar sempre novos objetos para cada entidade que surge na tela é algo custoso para JVM, tanto em performance quanto em uso de memória.

Para minimizar o uso desnecessário de recursos da máquina ou dispositivo, nós podemos utilizar o padrão Flyweight, na qual se encarregaria de criar apenas um único objeto em memória e compartilhá-lo pelo resto do jogo ou aplicação. A idéia é simples mas os ganhos são consideráveis!

Para exemplificar bem o uso deste padrão de projeto, nós da TriadWorks escrevemos um post sobre o assunto com direito a exemplos! Vale a pena dar uma olhada e ver se esse padrão se encaixa no seu projeto!

Para não perder nenhum post no blog dos instrutores da TriadWorks, você pode se inscrever na nossa página (fica no rodapé!) e receber um email sempre que um novo post for lançado! Ah! Nós estamos tentando blogar toda segunda-feira pela manhã, então fica de olho!

Tagged with: , , , , , , , , , ,
Posted in Boas Práticas, Engenharia de Software, Java

Defina a identidade da sua entidade

Identidade da Entidade

Um dos princípios básicos da orientação objetos é que toda entidade deve ter um identidade. Esse princípio é tão importante que se não o levarmos a sério podemos ter problemas nas nossas lógicas de negócio e muitas vezes nos frameworks que trabalhamos, como JSF ou JPA/Hibernate.

Na linguagem Java a identidade de um objeto é definida através do métodos equals e hashCode. Implementá-los de forma correta pode evitar problemas quando trabalhamos com componentes de seleção no JSF (como h:selectOneMenu ou h:selectManyMenu) ou quando implementamos nossos conversores genéricos de entidades, por exemplo!

Para melhor entender a necessidade de definir a identidade de suas entidades, você pode ler meu post no blog dos desenvolvedores e instrutores da TriadWorks! Lá além de abordarmos temas como design de classes e Domain-Driven Design (DDD), nós também comentamos sobre algumas boas práticas quanto a maneira correta de implementar os métodos equals e hashCode ao trabalhar com Hibernate!

Tagged with: , , , , , , , , , , , , , , , , ,
Posted in Boas Práticas, Desenvolvimento Ágil, Desenvolvimento de Software, Hibernate, Java, JPA

Upload via AJAX com o componente h:inputFile do JSF 2.2

Demorou quase 10 anos para que implementassem um componente de upload no JSF. O componente h:inputFile só foi criado na versão 2.2 da especificação. Apesar da longa espera, o componente já trouxe suporte nativo a AJAX e integração com a API do Servlet 3.

Utilizá-lo é tão simples quanto qualquer outro componente de entrada de dados, tanto é que podemos registrar conversores e validadores no componente de maneira semelhante. Além disso, basta usarmos a tag f:ajax para submetermos o formulário via AJAX, ou seja, nada de JavaScript! Por exemplo, o código abaixo irá disparar uma requisição AJAX após selecionarmos o arquivo:


    

Vale a pena conhecer o componente h:inputFile e ficar por dentro das suas atuais limitações que serão resolvidas em versões futuras do JSF.

O componente de upload de arquivos e muitas outras novidades do JSF 2.2 são exploradas no nosso curso de JSF 2 com Spring.

Tagged with: , , , , , , , , , ,
Posted in Desenvolvimento de Software, Java, JEE, JSF, JSF2, web