| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/11/2010 13:24:45
|
esmiralha
JavaEvangelist
Membro desde: 19/07/2006 09:04:42
Mensagens: 402
Offline
|
Eu não sei, Marcos. Eu teria que dar mais atenção ao framework antes de poder dar uma opinião. Mas, de uma maneira geral, considero invasivos os frameworks que exigem que os objetos de negócio implementem uma interface ou estendam uma classe. Idealmente, quanto menos invasivo, melhor, porém há geralmente um trade-off na facilidade de uso do framework.
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/11/2010 16:27:05
|
marcosalex
GUJ Expert
![[Avatar]](/images/avatar/0a8f8b227be2d04a675082cc9d51c127.jpg)
Membro desde: 20/02/2008 12:32:59
Mensagens: 3371
Offline
|
esmiralha wrote:Eu não sei, Marcos. Eu teria que dar mais atenção ao framework antes de poder dar uma opinião. Mas, de uma maneira geral, considero invasivos os frameworks que exigem que os objetos de negócio implementem uma interface ou estendam uma classe. Idealmente, quanto menos invasivo, melhor, porém há geralmente um trade-off na facilidade de uso do framework.
Acho que entendi o problema. Pelo menos em Pojos, geralmente o pessoal implementa uma interface pra identificar o objeto como sendo um pojo ou pra acessar métodos em comum na arquitetura adotada. O problema é o framework exigir esse comportamento pra uma interface específica, certo?
Acredito que o motivo é porque o Demoiselle possui uma arquitetura definida, que é a adotada pelo governo. É uma tentativa de padronizar uma arquitetura mínima entre os vários programas dos vários orgaos estatais.
Se isso é bom ou ruim, não tenho opinião formada ainda.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/11/2010 17:24:54
|
esmiralha
JavaEvangelist
Membro desde: 19/07/2006 09:04:42
Mensagens: 402
Offline
|
Pode ser, Marcos.
Tem um padrão chamado Abstract Class que é a idéia de você ter uma classe base abstrata para os principais conceitos da sua arquitetura. Se você tem Filtros, crie um BaseFilter, se tem DAOs crie um BaseDAO, a mesma coisa com Entidades... etc. Eu acho que quando o framework exige que você estenda uma classe dele, o padrão Base Class se torna ainda mais útil, ajudando de certa forma a isolar a dependência do framework na classe base.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/11/2010 17:35:46
|
tnaires
GUJ Master
![[Avatar]](/images/avatar/5f6371c9126149517d9ba475def53139.png)
Membro desde: 22/12/2003 08:05:58
Mensagens: 1678
Localização: Porto Alegre/RS - Natal/RN
Offline
|
Tenho a mesma opinião do esmiralha.
Já vi desenvolvedores usarem interface para as entidades do modelo de domínio da seguinte forma:
Essa forma força todas as entidades a possuírem um id do tipo inteiro.
Então as coisas podem ficar mais flexíveis:
Isso corrige o problema do tipo, porém o nome do atributo que armazena o identificador tem que ser obrigatoriamente "id", e isso pode ser ruim para a linguagem utilizada no domínio. E se eu tiver uma entidade Pessoa cujo nome do identificador seja "cpf"? E se tiver uma classe Usuario com identificador "login"?
Para evitar esse problema, podemos tirar os métodos getId() e setId() da interface:
Mas, sinceramente, qual o ganho que teríamos aqui?
Resumindo, essa prática é invasiva porque força o desenvolvedor a adotar certas convenções que talvez não fossem interessantes para todas as situações.
This message was edited 2 times. Last update was at 12/11/2010 10:50:23
|
Tarso Nunes Aires
Blog - http://cabritin.wordpress.com/
Delicious - http://delicious.com/tnaires
Twitter - @tnaires
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/11/2010 10:00:41
|
marcosalex
GUJ Expert
![[Avatar]](/images/avatar/0a8f8b227be2d04a675082cc9d51c127.jpg)
Membro desde: 20/02/2008 12:32:59
Mensagens: 3371
Offline
|
tnaires wrote:
Mas, sinceramente, qual o ganho que teríamos aqui?
Teríamos o ganho de poder criar um método
Vejo muita arquitetura fazer algo do tipo, muitas vezes pra um DAO generico, por exemplo.
Por isso minha dúvida se o problema é o uso ou a vinculação disso a um framework.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/11/2010 10:49:00
|
tnaires
GUJ Master
![[Avatar]](/images/avatar/5f6371c9126149517d9ba475def53139.png)
Membro desde: 22/12/2003 08:05:58
Mensagens: 1678
Localização: Porto Alegre/RS - Natal/RN
Offline
|
marcosalex wrote:Teríamos o ganho de poder criar um método
Vejo muita arquitetura fazer algo do tipo, muitas vezes pra um DAO generico, por exemplo.
Por isso minha dúvida se o problema é o uso ou a vinculação disso a um framework.
Eu ainda acharia melhor simplesmente parametrizar o DAO do que forçar todas as minhas entidades a implementar Entity:
This message was edited 2 times. Last update was at 12/11/2010 10:53:10
|
Tarso Nunes Aires
Blog - http://cabritin.wordpress.com/
Delicious - http://delicious.com/tnaires
Twitter - @tnaires
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/11/2010 11:19:39
|
esmiralha
JavaEvangelist
Membro desde: 19/07/2006 09:04:42
Mensagens: 402
Offline
|
Marcos,
se a interface IPojo é de uma biblioteca de terceiros que dá suporte a persistência, me parece ruim que um detalhe de persistência invada o domínio. O melhor seria acoplar isso a um DAO (que pode ser visto como a faceta de persistência de um objeto de domínio).
O Hibernate resolve isso através de um mapeamento externalizado em XML. O objeto de domínio desconhece Hibernate, nem sabe que está sendo persisitido (idealmente).
O ActiveRecord do Rails por sua vez exige a extensão de uma classe. No caso do Rails, meu entendimento é que o mapeamento OR é "ingênuo", no sentido de assumir que o modelo relacional e o modelo de objetos são extremamente similares.
O Hibernate possui maior flexibilidade para mapear seus objetos ao modelo relacional. Por outro lado, Rails é mais fácil de usar. Esse é o trade-off, NMHO.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/02/2011 13:51:05
|
robsonsx
Entusiasta Java
Membro desde: 01/02/2005 11:44:54
Mensagens: 24
Localização: Salvador/BA
Offline
|
marcosalex wrote:Agora fiquei com uma dúvida: qual a alternativa sem criar interface pra identificar usando Generics que a minha classe é um Pojo?
Opa,
Trabalho neste projeto, inicialmente IPojo era utilizado como uma marcação mesmo... realmente, tinha pouca função. Na versão 2.0 esta interface deixa de existir, assim como outras, dando lugar a marcações com anotações. No caso do IPojo, como usamos jpa... usa-se a própria @Entity;
Mas como sua pergunta é em relação a generics... simplesmente estamos passando Object quando esperamos que a classe possua um "Pojo".
|
Robson Ximenes
------------------------------------------------
http://robsonximenes.com |
|
|
 |
|
|