Boa tarde galera, tudo blz?
Gostaria de tirar uma dúvida com os mais experientes…
Em meus projetos Java EE geralmente eu uso JPA/Hibernate para a persistência. Gostaria de saber se é interessante os entities do JPA terem métodos de negócio (andei lendo sobre anemic domain model e objetos fantoches) e gerenciarem seu próprio estado.
Antes de ler esses artigos sobre os assuntos citados acima, meus sistemas eram estruturados (hoje eu percebo isso), daí gostaria de saber se existe alguma forma de tirar proveito das facilidades do framework de persistência sem criar um modelo “feio”.
A arquitetura que eu utilizava antigamente era uma fachada delegando para um controlador (padrão grasp), e este controlador encapsulava a regra de negócio relacionado a um determinado objeto, e este objeto em questão tinha apenas atributos e getters/setters.
Aguardo as sugestões…
Valeu pela força galera!

É mais do que interessante.Se você quer fazer um sistema realmente orientado a objetos, digamos que isso é mandatório.
Existe alguns casos muuuito específicos, seja por requisito ou por algum modelo antigo de distribuição de objetos, onde vc pode ter casos de dados separados do comportamento. Para essas aberrações ou similariedades, você deve usar abstrações por “Modules” (pacotes)… onde, explicando de grosso modo, você define a granulariedade da abstração de uma entidade em subpacotes que contém a classe com os dados e uma interface no mesmo nível contendo a assinatura do comportamento daquela mesma classe.
Tanto Modules como outras praticas e paradigmas associados a um modelo rico de objetos, você encontra na web pesquisando por Domain-Driven Design.
É bastante interessante os próprios objetos terem suas regras de negócio. Mas tome um pouco de cuidado. Normalmente, quem codifica de maneira estruturada tende a criar um bloco único e gigante de código representando toda a lógica. Em orientação a objetos, essa lógica fica espalhada entre os vários objetos da aplicação, onde cada objeto sabe apenas parte da solução. Ou seja, você não “vê a lógica”, mas ela passa a ser construída dinamicamente, de acordo com sua estrutura de objetos.
Essa “quebra” de funcionalidade entre objetos costuma ser dolorosa pra quem apenas está começando em OO, e não vejo senão duas coisas coisas que te façam evitam isso: 1) tentativa e erro; 2) e faro, instinto, “code smell” ou qualquer outro jargão de agilista, para encontrar coisas no seu código que não está bem.
O meu maior receio era de alguma “incompatiblidade” com o Hibernate/JPA (como eu disse, eu nunca coloquei comportamento nas minhas entities).
Valeu pelas respostas galera 8)
Ao estudar DDD vc irá se deparar com uma coisa chamada Repositorio, depois do mergulho vc irá ler sobre uma coisa que já gerou muita conversa aqui no guj, que é a seguinte: entidades devem ou não acessar os tais repositórios.
Onde que isso se liga ao que vc disse: O hibernate gera os objetos de entidade automaticamente logo vem a questão “Como vou injetar o repositorio nestes objetos?”.
Se não me engano uma das respostas que eu li foi utilizar a anotação @Repository do Spring.
Por favor, se o que eu disse estiver errado corrijam.
P.S. No seu caso eu indico o livro “POJO IN ACTION” (tem versão em português).
flws.
Fantomas, a anotação @Repository do Spring não resolve quando a classe é instanciada por load de algum framework ORM.
Em vários tópicos discutimos a injeção em entidade e quase sempre a resposta foi através de Factories ou AOP.
Segue abaixo um dos tópicos:
http://www.guj.com.br/posts/list/84469.java
Obrigado Alessandro por indicar o tópico, vou ler atentamente
.
[quote=Alessandro Lazarotti]Fantomas, a anotação @Repository do Spring não resolve quando a classe é instanciada por load de algum framework ORM.
Em vários tópicos discutimos a injeção em entidade e quase sempre a resposta foi através de Factories ou AOP.
Segue abaixo um dos tópicos:
http://www.guj.com.br/posts/list/84469.java
[/quote]
No último post do tópico que vc indicou o rponte indicou um link http://debasishg.blogspot.com/2007/02/domain-driven-design-inject.html que fala da anotação @Configurable vc sabe dizer se é uma boa opção para acesso à respositorios a partir da entidade?
Mais uma vêz valeu pela dica do post.
[]'s
Se vc trabalha com o Spring, sim é.
Contudo, @Configurable faz parte do modulo AOP do Spring, logo , para usa-lo certifique-se que seu ApplicationContext esta configurado adequadamente.
Obrigado pelas dicas Alessandro, caras como vc é que faz o guj valer a pena.
valeu!