Exactly!

A idéia é vc sempre transportar DTOs e nunca expor suas entidades (objetos
de domínio).
Em suma, quase sempre os DTOs tem a mesma estrutura de entidades, mas nem
sempre tb. Isso te permite uma maior flexibilidade em transportar dados
entre view e services e, também, não expondo seus domínios vc consegue
manter a regra de negócio entre eles mais "oculta" para sua view (uma vez q
a view só conhece os DTOs).

Agora, como já comentamos, concordamos é mais "chato" e burocrático
trabalhar com DTOs, principalmente na hora de vc "converter" para
entidades... pensando nisso o Bruno Fuster da DClick postou uma ferramenta
bem interessante:
http://blog.dclick.com.br/2009/10/22/transfer-object-pattern-annotations/pt/


[]s



Em 13 de setembro de 2010 10:40, Leonardo Ribeiro
<[email protected]>escreveu:

> Fala Mário...
>
> Só uma dúvida cara, usando a abordagem dos DTOs, se eu vou criar um novo
> "usuario" por exemplo, no meu código flex eu irei criar um novo DTO usuario
> e envia-lo para o server e lá irei fazer a "conversão" em um usuario do
> "dominio" e realizar as operações necessárias, correto?
>
> Obrigado
>
> 2010/9/8 Leonardo Ribeiro <[email protected]>
>
> Sim, eu já havia pensado nisso, nos DTOs, mas queria ter a opinião de quem
>> já usa ou se deparou com o mesmo problema que o meu aqui agora...
>>
>> []'s
>>
>>
>> 2010/9/8 Mário Júnior <[email protected]>
>>
>>> Sim, trabalhoso, mas pensando de forma mais "politicamente correta" seria
>>> isso mesmo!
>>>
>>> Pela conversa - e pela dúvida específica - me parece q vc está expondo
>>> diretamente as entidades do seu negócio né?
>>> No começo eu tb fazia isso (
>>> http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensource-para-sistemas-web-parte-2-final/#comment-149..
>>>  caramba, já tem +2 anos esse meu comentário =P) mas depois com o tempo me
>>> conscientizei de q, de fato, não é uma boa prática expor entidades do
>>> hibernate, justamente por me deparar com os principios básicos de
>>> encapsulamento, code responsability, etc... então adotei o uso de VOs (q hj
>>> já aprendi/acostumei a chamá-los de DTOs). São objetos "burros" q
>>> simplesmente trafegam dados entre a view e os services, e daí nos services
>>> eu transfiro os dados desses DTOs para as entidades, respeitando toda a
>>> regra de negócio encapsulado nesses objetos.
>>>
>>> Enfim, como comentei antes, cada caso é um caso, e todos estão sujeitos a
>>> longas análises... pra isso estamos ae :)
>>>
>>>
>>> []s e boa sorte.
>>>
>>>
>>>
>>> Em 8 de setembro de 2010 19:07, Leonardo Ribeiro 
>>> <[email protected]>escreveu:
>>>
>>> Mário,
>>>>
>>>> É, realmente pensando bem não seria uma boa já que teria os casts...
>>>> Você que já tem experiência em vários projetos java x flex, como resolve
>>>> o problema do encapsulamento, tendo como exemplo o simples objeto 
>>>> NotaFiscal
>>>> que tem como atributo Itens ?
>>>>
>>>> Sendo que em NotaFiscal não tem um método setItens(List itens) mas sim,
>>>> por exemplo, addItem(Item item), porque a nota que deve controlar seus
>>>> itens, fazendo se necessário alguma validação no item passado como 
>>>> parâmetro
>>>> no método addItem(Item item)?
>>>>
>>>> Usa VO? Nesse caso teria que sempre que ler do BD que retorna objetos do
>>>> domínio, fazer a criação do VO correspondente e enviar para o Flex e quando
>>>> receber do Flex o VO fazer o inverso para poder trabalhar no server com o
>>>> objeto de domínio correspondente... isso? Trabalhoso né? hehe
>>>>
>>>> Obrigado pela atenção
>>>>
>>>>
>>>> 2010/9/8 Mário Júnior <[email protected]>
>>>>
>>>> É possível sim.
>>>>> Abra o source da classe JavaAdapter. Nessa classe vc tem o método
>>>>> invoke(Message message).
>>>>>
>>>>> Dentro de message (faça um cast para RemotingMessage) vc tem tudo oq
>>>>> precisa saber (qual classe de serviço será chamada e qual o objeto de
>>>>> transporte será passado como argumento, assim como qual é o seu homonimo 
>>>>> no
>>>>> java, etc...).
>>>>>
>>>>> Agora, precisa ter um bom cuidado com isso, pois ao meu ver, vc estaria
>>>>> envolvendo uma certa "regra de negócio" dentro desse adapter. Não digo 
>>>>> que é
>>>>> errado (não sou extremista) mas fique ciente q a medida q o seu projeto 
>>>>> for
>>>>> crescendo (e as regras  aumentando) vc vai ter sempre q fazer "testes" no
>>>>> objeto tranportado para saber se é um tipo X ou tipo Y para daí então
>>>>> decidir qual método chamar (ou deixar de chamar), etc...
>>>>>
>>>>> Daí fica a pergunta: Não seria melhor fazer esses testes na sua camada
>>>>> de serviços, em vez de fazer na camada de comunicação?
>>>>>
>>>>> ps: cada "caso" é um caso... :)
>>>>>
>>>>>
>>>>> []s
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> Em 8 de setembro de 2010 15:31, Leonardo Ribeiro <
>>>>> [email protected]> escreveu:
>>>>>
>>>>>>  Pessoal,
>>>>>>
>>>>>> Alguém que já tenha mexido no fonte do BlazeDS sabe se é possível
>>>>>> fazer com que ele, ao invés de fazer a "criação/injeção" dos valores do
>>>>>> objeto as3 -> java via setters publicos usar reflection?
>>>>>>
>>>>>> Porque isso? Porque daí eu não precisaria de setID por exemplo, que
>>>>>> seria a "pk" do objeto, uma vez que essa "pk" seria criada no construtor 
>>>>>> do
>>>>>> objeto e não tem sentido alterar. Outro caso seria de no objeto java ter 
>>>>>> uma
>>>>>> coleção como atributo (típico caso de nota fiscal ter uma coleção de 
>>>>>> itens)
>>>>>> com isso não precisaria ter um setItens(List itens) no objeto
>>>>>> NotaFiscal.java, e sim um addItem(Item item), mantendo o encapsulamento,
>>>>>> pois quem deve inserir/gerir os itens da nota é a nota.
>>>>>>
>>>>>>
>>>>>> --
>>>>>> []'s
>>>>>> Leonardo
>>>>>>
>>>>>> Linux User #488650
>>>>>> Ubuntu User #27045
>>>>>> Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece
>>>>>>
>>>>>> --
>>>>>> Você recebeu esta mensagem porque está inscrito na lista "flexdev"
>>>>>> Para enviar uma mensagem, envie um e-mail para
>>>>>> [email protected]
>>>>>> Para sair da lista, envie um email em branco para
>>>>>> [email protected]
>>>>>> Mais opções estão disponíveis em
>>>>>> http://groups.google.com/group/flexdev
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Mario Junior
>>>>> http://blog.mariojunior.com/
>>>>> @mariojunior
>>>>>
>>>>> --
>>>>> Você recebeu esta mensagem porque está inscrito na lista "flexdev"
>>>>> Para enviar uma mensagem, envie um e-mail para
>>>>> [email protected]
>>>>> Para sair da lista, envie um email em branco para
>>>>> [email protected]
>>>>> Mais opções estão disponíveis em
>>>>> http://groups.google.com/group/flexdev
>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> []'s
>>>> Leonardo
>>>>
>>>> Linux User #488650
>>>> Ubuntu User #27045
>>>> Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece
>>>>
>>>> --
>>>> Você recebeu esta mensagem porque está inscrito na lista "flexdev"
>>>> Para enviar uma mensagem, envie um e-mail para [email protected]
>>>> Para sair da lista, envie um email em branco para
>>>> [email protected]
>>>> Mais opções estão disponíveis em http://groups.google.com/group/flexdev
>>>>
>>>
>>>
>>>
>>> --
>>> Mario Junior
>>> http://blog.mariojunior.com/
>>> @mariojunior
>>>
>>> --
>>> Você recebeu esta mensagem porque está inscrito na lista "flexdev"
>>> Para enviar uma mensagem, envie um e-mail para [email protected]
>>> Para sair da lista, envie um email em branco para
>>> [email protected]
>>> Mais opções estão disponíveis em http://groups.google.com/group/flexdev
>>>
>>
>>
>>
>> --
>> []'s
>> Leonardo
>>
>> Linux User #488650
>> Ubuntu User #27045
>> Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece
>>
>
>
>
> --
> []'s
> Leonardo
>
> Linux User #488650
> Ubuntu User #27045
> Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece
>
> --
> Você recebeu esta mensagem porque está inscrito na lista "flexdev"
> Para enviar uma mensagem, envie um e-mail para [email protected]
> Para sair da lista, envie um email em branco para
> [email protected]
> Mais opções estão disponíveis em http://groups.google.com/group/flexdev
>



-- 
Mario Junior
http://blog.mariojunior.com/
@mariojunior

-- 
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para [email protected]
Para sair da lista, envie um email em branco para 
[email protected]
Mais opções estão disponíveis em http://groups.google.com/group/flexdev

Responder a