Beleza Mário,

Mas me diz uma coisa, supondo a situação (novamente) da nota fiscal que tem
os seus itens (uma collections falando em java).
O objeto nota fiscal tem responsabilidade sobre os seus itens, é através
desse objeto que podemos adicionar e remover itens (na nota não tem o método
setItens(List itens)).
Sendo assim, eu teria um dto nota que contem dto's itens...

O problema que vejo é que na view (flex) eu vou adicionar dto's notas e
itens (não haverá nenhuma regra aqui)....
quando for submetido para o server a nota com seus itens o serviço receberá,
irá fazer a conversão para as entidades de domínio e a regra será aplicada,
mas se o cara digitou uma nota com uns 15, 20, 50 itens ele só vai ter um
feedback do sistema no final, ou to errado?


Agora me diz o que acha da seguinte situação:

public abstract class DomainEntity implements IDomainEntity {

private Long id;
}

public class Usuario extends DomainEntity {

private String nome;
private String login;
private String senha;
private String email;
}

@Service
@RemotingDestination
public class UsuarioUseCase implements IUsuarioUseCase {

public Usuario usuario;
 public void novo() {
this.usuario = new Usuario();
}
 public void setNome(String nome) {
this.usuario.setNome(nome);
}
 public String getNome() {
return this.usuario.getNome();
}

//outros metodos delegate...(para cada atributo de usuario)
}

Minha view tem acesso a esse useCase e no meu formulário por exemplo, quando
eu
clicasse em "novo" seria invocado o metodo remoto "novo" de "usuarioUseCase"
que criaria uma
nova instancia de Usuario... e a cada campo preenchido invocasse um metodo
correspondente,
por exemplo, no cadastro de usuario eu após entrar com o valor para o nome
seria invocado o
metodo setNome do server e assim para os outros atributos.
Com isso eu poderia já ir quando necessário validando com as regras de
negócio.
E como o flex é assincrono já ajudaria pois o processo no client não vai
"parar" esperando
o retorno do server...
Mas para isso eu precisaria ter uma referência remota para a "sessão" para
saber que o nome
que está sendo setado no metodo setNome, se refere ao usuário previamente
criado pelo metodo
"novo".
Tem como eu fazer isso no Flex (guardar a "sessão" (não sei se é sessão))?



2010/9/13 Mário Júnior <[email protected]>

> 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
>



-- 
[]'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

Responder a