JPA + Resfful Service

26 respostas
T

Olá galera.

Vocês veem algum bom motivo para não mapear em uma única classe annotations jpa e rest.

@Entity

<a class="mention" href="/u/path">@Path</a>("/xyz")

Objeto {

…

}

No contexto da minha app isso não teria problema algum. Alguém já teve problemas com isso?

26 Respostas

Alexandre_Saudate

Nossa… você iria persistir um serviço? Boa sorte!

justoeu

Velho… cade a Modularização? Camadas?
Reaproveitamento é Luxo?! entre outras coisitas mais!!!

Assim como nosso amigo disse acima: Persistir um Serviço? Good Luck!!!

T

Não né. A classe tem responsabilidades, o fato de você colocar annotations na classe você está adicionando metainfos na classe que será utilizada por alguém. Se você incluir @Entity na classe não significa que a classe não possa ter métodos na classe além de setters/getters. Certo?

Nada impediria de disponibilizar um método na minha classe que fornece um serviço para alguém.

T

Então vocês criam objetos anêmicos. É isso? Sua classe que tem @Entity só tem setter/getter e aí provavelmente vocês criam um ObjetoManager. Cade o especialista da informação?

T

Eu vejo que modularizar é importante mas quando há necessidade. Agora querer modularizar por luxo ou preciosismo é desnecessário, gera complexidade, etc.

Alexandre_Saudate

Ô meu Deus… distorcer a informação é isso aí.

Não é questão de criar objetos anêmicos. A questão é que você está misturando duas coisas que violam o princípio mais básico da OO : a coesão. Misturando tudo isso, você corre sérios riscos (do seu framework JAX-RS não suportar essas propriedades, de você querer trafegar esse objeto pra algum lugar que não tenha suporte pra JAX-RS, etc.)

Não defenda isso como objeto não-anêmico, porque isso é outra coisa.

T
Fazendo uma analogia, é mesma coisa que ter um objeto assim:

@Entity

@XmlRootElement

Objeto{

//

}

Isso significa que você vai colocar uma tabela, coluna, etc no xml ou vice-versa. Sinceramente até o momento não há argumentos suficientes.

Alexandre_Saudate
<blockquote><div class="quote-author">tcf:</div>Fazendo uma analogia, é mesma coisa que ter um objeto assim:

@Entity

@XmlRootElement

Objeto{

//…

}

Isso significa que você vai colocar uma tabela, coluna, etc no xml ou vice-versa. Sinceramente até o momento não há argumentos suficientes.

Não, isso quer dizer que você está permitindo que sua entidade seja serializável como XML. Sem problemas com isso.

Problema há quando você quiser persistir uma coisa que obviamente não é persistível. Você já pensou o que vai fazer com isso quando você ler de volta do banco? A cada vez que fizer uma releitura do banco, você vai ter um serviço novo? E quando você fizer uma requisição pra esse serviço, o contêiner JAX-RS vai ter que criar suas entidades pra você ter que persistir no banco? Já passou pela sua cabeça que um contêiner JAX-RS pode muito bem fazer instrumentação pra coisas como segurança, por exemplo? E que essa instrumentação pode adicionar campos no seu serviço que você não vai querer /poder persistir?

De novo… boa sorte!!!

T

Ok. Agora estou convencido. Bons argumentos.

Obrigado =)

T

Convenceu +ou- porque se for programar assumindo que tem N fatores transversais ao que você está fazendo você acaba fazendo nada.

Nada impediria ter uma instância da classe criada pelo web-container e uma outra instância criada pelo hibernate e outra criada por mim.

Alexandre_Saudate

tcf:
Convenceu +ou- porque se for programar assumindo que tem N fatores transversais ao que você está fazendo você acaba fazendo nada.

Nada impediria ter uma instância da classe criada pelo web-container e uma outra instância criada pelo hibernate e outra criada por mim.

Está percebendo o tanto de complexidade você teria que adicionar pra contornar um problema que seria facilmente resolvido se você simplesmente separasse as duas coisas?

T

Então na verdade estamos expondo e especulando não sabemos o que aconteceria e se aconteceria.

T

talvez a gente tivesse a fazer o IoC da pergunta. Você já pensou como simplificaria se encapsulasse o serviço no objeto que é pertinente.

Talvez se esse objeto começasse a ficar “gordo” e fazendo coisas demais aí poderíamos fazer a separação natural das coisas e aí sim criar objetos com responsabilidades mais particulares e “granularizar” as coisas.

Alexandre_Saudate

Cara, você já tomou a sua decisão e está querendo simplesmente que alguém te diga que sua decisão está certa.

Boa sorte.

T

Um exemplo. Nada impediria de ter um método assim no meu objeto:

@Entity

class Objeto{

//

public static Objeto of (id){

return em.find(Objeto.class, id);

}

//

}
Alexandre_Saudate

tcf:
Um exemplo. Nada impediria de ter um método assim no meu objeto:

@Entity

class Objeto{

//

public static Objeto of (id){

return em.find(Objeto.class, id);

}

//

}</blockquote>

Já disse. Você só está procurando alguém pra falar que sua idéia está correta, pra você ir fundo. Você não vai encontrar ninguém assim aqui.

Boa sorte.

justoeu

… “Talvez se esse objeto começasse a ficar “gordo” e fazendo coisas demais aí poderíamos fazer a separação natural das coisas e aí sim criar objetos com responsabilidades mais particulares e “granularizar” as coisas.”

Você mesmo já deu o seu argumento por que não usar tudo dentro de um Serviço, que no meu ponto de vista, deve ser Simples e sucinto!

T

Bem apenas para constar encontrei um artigo no site da oracle que fala exatamente disso. Ele disse que é perfeitamente aceitável, repito, perfeitamente aceitável…

Agora que sabem que há um artigo de alguém falando que pode vocês vão seguir as cegas.

abs

Alexandre_Saudate

tcf:
Bem apenas para constar encontrei um artigo no site da oracle que fala exatamente disso. Ele disse que é perfeitamente aceitável, repito, perfeitamente aceitável…

Agora que sabem que há um artigo de alguém falando que pode vocês vão seguir as cegas.

abs

[ironia mode=on]
Sim, claro. Afinal, o pessoal da Oracle é perfeitamente confiável, sempre faz produtos bons, não erra nunca…
[/ironia]

Já disse, se você quer alguém pra ficar passando a mão na sua cabeça e concordando com tudo o que você diz, aqui não é o lugar onde você vai encontrar.

P.S: Artigo da Oracle, é? Se importaria em passar o link?

justoeu

Faz o seguinte… manda o seu curriculo para a Oracle e manda sua solução!
Acredito que eles vão te contratar!

Se vc achou, esta satisfeito, por que então perguntou a opnião se a sua já está certa?!
basta imprimir o artigo e colocar embaixo do braço e ser feliz!

Aproveitando… ao nosso amigo… manda o link ae!

:slight_smile:

T

Opa. Tranquilo. Sempre uma satisfação ajudar os novatos.
Espera aí só um minuto. Deixa eu procurar o link aqui.

T

Então, o link é esse: www.google.com.br
E lá você procura por jpa + restul e aí vai navegando nos links e vendo. A solução está em um deles.

Então, eu até mandei o cv pra Oracle. Eles fizeram uma proposta e eu recusei e optei por outro trampo.

E acho engraçado pessoas que acham que manjam. Eu me divirto como uma inner class privada. É muita filosofia, muito blablabla, e muito “e se, e se”, e pouco trampo.
Sinceramente desanimo cada vez mais com essa área de TI. É muita gente que leu apostila e acha q está manja. Muita presunção, orgulho, preciosismo.

Enfim!
Procura lá no link que te mandei.

PS: Estou te sentindo meio tenso.

Alexandre_Saudate

Que conveniente, simplesmente responder “procure no google”… O artigo existe? Ou você simplesmente não quer mostrar porque alguém pode interpretar o que está escrito do jeito certo e te mostrar que sua interpretação está errada? Típica atitude de quem quer mãozinha na cabeça.

T

IIIIIIIh tô te sentindo meio tenso também.

Eu procurei, achei, interpretei e entendi. Típica atitude da grande maioria dos programadores. Arrogância em pessoa. Isso acontece bastante. Manja?
Sim seu eu interpretar errado pode ter certeza que eu vou assumir e dizer: “Sim, interpretei errado e você está certo”. Mas agora quero ver se você e o outro gente boa aí de cima tem humildade suficiente de assumir quando estiver errado. Na hora do bem bom a galera diz: “Fui eu que fiz, eu fiz assim porque blablabla, etcetc”. Mas na hora que são contrariados e são submetidos a uma saia justa não percebem que estão errados, não tem capacidade e humildade suficiente de dizer: “Sim, eu estava errado”. Nessa área de TI está cheio disso

E outra, um cara que cita matrix não pode ser levado a sério. Por favor, pare! Todo mundo está rindo de você. Eu estou rindo. O cara ali do outro tópico está rindo. Até o cara que você está sentado em cima está rindo.

E por favor encarramos esse tópico.

PS: Única maozinha na cabeça que quero é da mina aqui do lado na minha pitomba!

Alexandre_Saudate

Aliás, cansei de você. Se você acha o fodão e, mesmo com argumentos pra você fazer exatamente o contrário da sua idéia “mirabolante”, você ainda quer insistir, boa sorte. Só esteja avisado de que eu vou rir MUITO se você parar por aqui de novo pra falar que está tendo problemas com esse design.

Encerro aqui a participação no tópico.

T

Cara. Se eu tiver problemas eu falarei. Fique tranquilo. Mas a dúvida é: “Se você tiver problemas você falará, ou, seu orgulho é tão foda tão foda que vai fingir que deu tudo certo?”

Mas enfim eu encerro aqui essa discussão porque seu conhecimento em java só é mais forte que cheiro de bosta!

E digo mais para encerrar esse tópico eu era assim como você quando comecei java, muito arrogante, na verdade não chegava a tanto, mas acordei a tempo. Espero que isso aconteça com você. Mas tranquilo, os novatos são assim mesmo. Conforme sua experiência e sua senioridade for aumentando você aprenderá.

[]s

Criado 22 de dezembro de 2011
Ultima resposta 26 de dez. de 2011
Respostas 26
Participantes 3