DDD e JPA - Onde vão as annotations?  XML
Índice dos Fóruns » Arquitetura de Sistemas
Autor Mensagem
feliperod
JavaTeenager
[Avatar]

Membro desde: 07/11/2006 14:10:54
Mensagens: 184
Offline

Pessoal,

talvez eu tenha entendido errado algum conceito do DDD, mas eu procurei em muitos lugares, inclusive no GUJ e não achei nenhuma resposta simples para minha pergunta. Com certeza em algum lugar tem a resposta e talvez seja tão trivial que ficou perdida no tempo.

Eu entendo um pouco sobre DAOs e sobre Repositories, mas e as Entities?
Minha classe de Domain terá as regras de negócio e chama o repository para operações (como um service, certo?). O Repository pode executar algumas regras pertinentes a coleções de entities e chama o DAO quando necessário. O DAO precisa obter um objeto do Banco e no caso de um JPA da vida, deve utilizar um pojo com as anotações de JPA.

Mas aí é que fica minha dúvida. As anotações vão na Entity (falando em entity de Domain) ou vão em classes Java "replicadas" na camada de persistência. Caso sim, então eu tenho dois POJOs, um representando o Domain e outro simplesmente para a Persistência.

Pergunto isso porque não gosto da idéia de anotações no meu Domain. Minha classe de Domain não compila sem os jars do JPA.

Abração a todos...

Felipe Rodrigues de Almeida
No Twitter: @felipero
www.fratech.net
The Fratech way
Javabuntu
GUJ Master
[Avatar]

Membro desde: 08/02/2007 17:15:32
Mensagens: 1315
Localização: Brasília
Offline

tem um tópico aqui no GUJ que acho q vai tirar sua dúvida..

http://www.guj.com.br/posts/list/67988.java

SCJP 6
SCJD
SCWCD 5
Itil V2
[MSN]
Alessandro Lazarotti
Virtual Machine Man
[Avatar]

Membro desde: 21/01/2004 14:12:54
Mensagens: 719
Offline

Duplicar nem pensar... não existe motivos para isso, ainda mais se falando de POJOS.
Se a Entity JPA é POJO e seu Entity DDD é POJO, então os objetos são identicos.

Metadados são simplesmente metadados.




... Lezinho
------------------------
twitter: @lazarotti
http://alessandrolazarotti.wordpress.com/
http://jbossbrasil.org/

[Email] [MSN]
Thiago Senna
GUJ Master
[Avatar]

Membro desde: 11/02/2005 08:08:02
Mensagens: 1595
Offline

Talvez seja interessante utilizar o JPA com xml ao invés dos annotations. Isso para que o seu modelo não fique amarrado a forma que ele será persistido na base de dados. Mas não acho que seja grave utilizar annotations em seus entities e value objects. Só depende do quão purista você é, rsrs... Não é por que tem annotations que você não pode persistir as entidades utilizando jdbc.
[Email]
Alessandro Lazarotti
Virtual Machine Man
[Avatar]

Membro desde: 21/01/2004 14:12:54
Mensagens: 719
Offline

Thiago Senna wrote:Só depende do quão purista você é, rsrs..


Em outras palavras, depende o quanto chato você quer ser... hehe. Seja um cara legal com sua equipe, use anotações .

... Lezinho
------------------------
twitter: @lazarotti
http://alessandrolazarotti.wordpress.com/
http://jbossbrasil.org/

[Email] [MSN]
Javabuntu
GUJ Master
[Avatar]

Membro desde: 08/02/2007 17:15:32
Mensagens: 1315
Localização: Brasília
Offline

na verdade a escolha é sua, contanto que vc entenda que não fique ambos....ou um ou outro.......no meu caso uso bean com anotações...não acho poluído não....

SCJP 6
SCJD
SCWCD 5
Itil V2
[MSN]
feliperod
JavaTeenager
[Avatar]

Membro desde: 07/11/2006 14:10:54
Mensagens: 184
Offline

Bom, primeiramente, obrigado pelas opiniões.

Mas ainda fica uma questão. Eu posso usar uma entity anotada com jdbc na unha, mas a questão é outra. Se meus domains tem que ser POJO, penso que ele não pode ter dependencias.

Acho que a dúvida seria a seguinte:

Se um POJO é suposto ser uma classe que não dependa de nenhuma API para executar, como uma entity JPA anotada seria um POJO?
Imagine que se eu anoto um POJO com a anotaao @Entity eu sou obrigado a fazer import javax.persistence.Entity e isso me obriga a levar o persistence.jar junto com o POJO para onde ele for. Será que ele ainda é um POJO?

Sei que é meio polêmico, mas quero saber com o pessoal tá usando isso no escopo de Domain Driven Design

Felipe Rodrigues de Almeida
No Twitter: @felipero
www.fratech.net
The Fratech way
Alessandro Lazarotti
Virtual Machine Man
[Avatar]

Membro desde: 21/01/2004 14:12:54
Mensagens: 719
Offline

Anotações são apenas informações jogadas ao vento, não são códigos.
No caso do JPA, sua classe continua sendo POJO se apenas for anotada, mas deixa de ser se você utilizar EntityManager dentro dela (por isso use a abstração oferecida por um Repository).

Uma classe anotada não muda de comportamento, não ganha novas características nem nada, quem infere isso são os manipuladores das anotações... esses sim não são POJOS.

Levar os jars legados é um fato. Mas nada que uma refatoração não resolva. O melhor de tudo, a refatoração vai ser muito simples e sem possibilidades de erros em execução, pois as anotações não atribuem comportamentos inesperados... tudo que vc for pegar de erro será em tempo de compilação (importações, etc).


Eu utilizo algumas Entities JPA como entidades do DDD sem dor na consciência.

... Lezinho
------------------------
twitter: @lazarotti
http://alessandrolazarotti.wordpress.com/
http://jbossbrasil.org/

[Email] [MSN]
rodrigoy
GUJ Ranger
[Avatar]

Membro desde: 18/04/2006 01:06:28
Mensagens: 758
Localização: São Paulo
Offline

Bom senso... bom senso... bom senso... desenvolvimento de software se resume a bom senso!

Rodrigo Yoshima
www.ASPERCOM.com.br

Próximas Turmas:
São Paulo: Scrum 28/agosto | OOAD-UML 13/setembro

Débito Técnico Blog: blog.aspercom.com.br
[WWW]
feliperod
JavaTeenager
[Avatar]

Membro desde: 07/11/2006 14:10:54
Mensagens: 184
Offline

É talvez seja um pensamento muito purista, hoje tenho utilizado com as annotations nas entities mesmo. Mas seria ótimo não precisar fazer isso.
Alias, consigo isso com frameworks que não são baseados em annotations. Acho que essa seria a solução para domains que são distribuidos como uma lib, para utilização em JEE, e JME ao mesmo tempo. Ou simplesmente manter dois projeto separados, um para JEE e um para JME.

De qualquer forma, acho que o rodrigo tem razão. Utilizar de bom senso resolve bastante coisa.

Felipe Rodrigues de Almeida
No Twitter: @felipero
www.fratech.net
The Fratech way
pcalcado
Moderador
[Avatar]

Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline

O problema eh que metadados (annotations) acabam por criar uma outra 'dimensao' nos seus objetos. Minha dica eh:

- use o que for mais simples
- nao perca muito tempo viajando sobre annotations ao inves de fazer seu trabalho, eh confuso mesmo
- nao espalhe as anotacoes de infra pelas classes o quanto puder mas sem radicalismos

A forma com que os metadados sao usados em Java eh pessima. Metadados deviam fazer tagging apenas.

Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay
[Email] [WWW] [Yahoo!] [MSN]
rodrigoy
GUJ Ranger
[Avatar]

Membro desde: 18/04/2006 01:06:28
Mensagens: 758
Localização: São Paulo
Offline

Que risco você enxerga nas anotações da JPA e EJB3, Phillip?

Tenho criado algumas anotações minhas nos meus projetos. Você acha isso prejudicial de alguma forma também?


Rodrigo Yoshima
www.ASPERCOM.com.br

Próximas Turmas:
São Paulo: Scrum 28/agosto | OOAD-UML 13/setembro

Débito Técnico Blog: blog.aspercom.com.br
[WWW]
AvilaCS
Thread.start()
[Avatar]

Membro desde: 03/02/2007 18:28:12
Mensagens: 43
Localização: São Paulo
Offline

Também estou criando as anotações JPA nas entidades e EJB3 nos repositórios!

Vocês vêem algum tipo de problema nisto?

Grato.


____________________________________
Jossemar Ávila de Morais
jossemar.avila@siriussoftware.com.br

Sírius Software
Visite: www.siriussoftware.com.br

Insista, persista e nunca desista pois um dia você conquista.
[WWW]
Emerson Macedo
Virtual Machine Man
[Avatar]

Membro desde: 01/08/2006 16:55:28
Mensagens: 689
Localização: Rio de Janeiro - RJ
Offline

Lezinho wrote:Anotações são apenas informações jogadas ao vento, não são códigos.
No caso do JPA, sua classe continua sendo POJO se apenas for anotada, mas deixa de ser se você utilizar EntityManager dentro dela (por isso use a abstração oferecida por um Repository).

O que tem a ver ter um atributo de instância com ser um POJO ?

Emerson Macedo Leite
PMP - Ping-pong Master Player
CSM - Counter-Strile Manager
http://codificando.com

"Porque, assim como o relâmpago sai do oriente e se mostra até o ocidente, assim será também a vinda do filho do homem." - Mateus 24:27
[Email] [WWW] [Yahoo!] [MSN] [ICQ]
Thiago Senna
GUJ Master
[Avatar]

Membro desde: 11/02/2005 08:08:02
Mensagens: 1595
Offline

Não vejo a utilização de annotations nas entidades como problema dependendo do projeto. Levando em consideração que o objetivo do DDD é criar um domínio e que este pode ser reaproveitado em outros projetos independente da base de dados, então acho bom não poluir o código com anotações específicas do JPA. Até por que não seria legal depender de um jar do JPA para compilar suas classes.

Enfim... quais são e quantos sãos os ambientes que o seu domínio terá que atuar? Sei lá.. acho que ainda fica valendo o bom senso.. rsrs..

[Email]
 
Índice dos Fóruns » Arquitetura de Sistemas
Ir para:   
Powered by JForum 2.1.8 © JForum Team