Pessoal, estou desenvolvendo um sistema utilizando RMI aonde o client será apenas a camada de visualização, todo o processamento é feito no server. Porem durante a especificação surgiu que deveríamos fazer um controle no cliente para quebrar as entidades que trafegam, ou seja, quando eu enviar um objeto qualquer do servidor, esse controle deveria quebrar esse objeto e passar para interface apenas seus parâmetros.
Ex:
Objeto A tem 2 atributos codigo e nome
o controle da interface receberia esse objeto e chamaria a interface gráfica dizendo plotar (objeto.codigo, objeto.nome).
Quem passou a especificação disse que essa é a forma mais correta de se trabalhar no modelo MVC. Eu acho que estamos adicionando uma complexidade a mais no sistema.
Em alguns casos eu coloco o objeto em uma tabela e dependendo de seu estado, eu mudo um ícone na tabela para representá-lo (usando um renderer para a JTable). Isso esta correto ?? Um objeto de interface conhecer a regra de negócio de uma entidade ??
Não vejo problemas nessa solução. Enviar apenas parâmetros ao invés de um objeto será mais rápido e menos custoso.
Não entendi oq vc quis dizer com “Um objeto de interface conhecer a regra de negócio de uma entidade” apenas pq a interface exibe algo relacionado à entidade. A interface vai conhecer a entidade apenas se vc implementar dessa forma, ela pode perfeitamente exibir algo sobre a entidade sem conhecê-la, por exemplo usando o desgn pattern “observer” (não sei se é o seu caso, não ficou claro, mas por exemplo)
Agora imagine uma entidade com 20 atributos, vou passar os 20 atriibutos como parâmetro ?? Ou passar um objeto inteiro ??
Na questão de conhecer a regra de negócios, eu tenho um renderer para uma tabela que verifica alguns atributos do objeto para mudar cor de célula, ícone etc. Nesse cenário ele esta conhecendo a regra de negócios da Entidade…
[quote=Guitar_Men]Agora imagine uma entidade com 20 atributos, vou passar os 20 atriibutos como parâmetro ?? Ou passar um objeto inteiro ??
Na questão de conhecer a regra de negócios, eu tenho um renderer para uma tabela que verifica alguns atributos do objeto para mudar cor de célula, ícone etc. Nesse cenário ele esta conhecendo a regra de negócios da Entidade…[/quote]
Se vc vai trafegar pela rede, uso o objeto. O custo do trafego é o mesmo(so se seu objeto tiver vcentenas de atributos) e a granularidade fica menor.
Isso não tem nada a ver com MVC. Quem falou isso não sabe o que esta falando.
Se sua tela depende de um estado do objeto par ser renderizada do jeito X ou Y, sem problemas. Não é uma regra de negocio, mas sim de visualização.
Sua tela não conhece a regra de negocio, conhece o objeto que esta trafegando. Se vc quiser pode encapsular o que vc precisa em outro objeto, os chamados DTOs/TOs/VOs da vida.
[quote=jgbt][quote=Guitar_Men]Agora imagine uma entidade com 20 atributos, vou passar os 20 atriibutos como parâmetro ?? Ou passar um objeto inteiro ??
Na questão de conhecer a regra de negócios, eu tenho um renderer para uma tabela que verifica alguns atributos do objeto para mudar cor de célula, ícone etc. Nesse cenário ele esta conhecendo a regra de negócios da Entidade…[/quote]
Se vc vai trafegar pela rede, uso o objeto. O custo do trafego é o mesmo(so se seu objeto tiver vcentenas de atributos) e a granularidade fica menor.
Isso não tem nada a ver com MVC. Quem falou isso não sabe o que esta falando.
Se sua tela depende de um estado do objeto par ser renderizada do jeito X ou Y, sem problemas. Não é uma regra de negocio, mas sim de visualização.
Sua tela não conhece a regra de negocio, conhece o objeto que esta trafegando. Se vc quiser pode encapsular o que vc precisa em outro objeto, os chamados DTOs/TOs/VOs da vida.
[]´s
[/quote]
Quanto a trafegar o objeto pela rede isso estamos todos de acordo, ja que utilizamos o RMI justamente pela facilidade de trafegar objetos. Agora quando esse objeto chega no cliente e precisa ser propagado para a interface gráfica, o responsável pelo escopo diz que uma camada deve quebrar esse objeto em atributos e setar os valores na interface gráfica. Diferente de eu dar um new em um form e passar como parâmetro um objeto, deixando que a interface chame os gets para popular seus campos… Eu não vejo problemas na estrutura que eu fiz, trafegando os objetos porém existe o conceito do diagrama de robustez http://portalarquiteto.blogspot.com/2008/03/diagrama-de-robustez.html que diz:
[list]Atores interagem apenas com objetos de fronteira (boundary)[/list]
[list]Objetos de fronteira podem interagir com atores e controladores.[/list]
[list]Objetos de entidade interagem apenas com controladores[/list]
[list]Controladores interagem com qualquer outro tipo de objeto e também com outros controladores, mas nunca com atores.[/list]
As vezes me parece difícil chegar a um denominador comum na questão da arquitetura comparando o Java com outras linguagens…