@garcia-jj, no q vc disse: “Lazy remoto é uma put* gambiarra, e até existe um projeto para isso, o H3T. Mas no próprio site do projeto diz que lazy remoto viola a especificação e que não é aconselhado mesmo.”=> nisso (“artimanhas como o remote-lazy-load via HT3” :hunf: ser 1 gambiarra “na alta”), concordo plenamente contigo!
garcia-jj:
derlon:
Deixa ver se eu entendi bem: então vc é contra usarmos POJOs (das Entidades de Negócio) do Model na cam. FrontController??!..
Não, você entendeu errado. POJO é uma classe apenas com getters e setters, e um DTO não deixa de ser um POJO.
hei, de acordo c/ a sua explicação, o DTO é um… (como 1 galera aê diria) …um “Bean” =P
Garcia, na atual conjuntura, não tenho como discordar de vc q neste cenário (em q não seja possível se livrar do EJB) a única opção/solução realmente é usar o Padrão DTO. @jingle, apenas um parêntese: o ‘T’ de DTO e TO significa Transfer=>Transferencia de Dados. Porem, neste Cenário o Objeto não passa de 1 tier (camada física) para outra, o idéal não seria vc chama de DO (isso mesmo: Objeto de Dados); concorda, Garcia??! (Mas, já sinto 1 grande alívio só de vc não chamá-lo de VO! :shock: )
Mas, tb não posso deixar de mencionar:
"Não me lembro de nenhum padrão J2EE que não tenha sentido apenas para suprir uma deficiência da plataforma, mas o DAO, IMHO, é mais que isso, age na impedância (cadê o link apra aquele outro tópico?). É ideal? Claro que não, mas funciona (Como DTOs, que até hoje eu busco algo que possa eliminar)."
Quem falou isto não foi eu, não; foi o Phillip “Shoes” Calçado! A ref. em: http://www.guj.com.br/posts/list/20668.java (Ah, eu só substituiria o termo “plataforma” pelo termo “API do EJB”.)
A conclusão q tiramos disso é q o DTO (e uma grande parte dos outros Padrões do catálogo J2EE Core-Patterns) só foi “inventada” para melhoria de performance (para “suprir uma deficiência da” “API do EJB”).
garcia-jj:
Errado é você largar as classes persistentes assim na web.
.
A entidade deve ficar dentro da sua camada de negócio, e não deve ir para a web. Quem vai para web é seu DTO, que não é uma simples classe qualquer, ela é uma classe que deve ter os objetos e atributos que você precisa para tal tela. (falando a grosso modo sem entrar em detalhes).
Derlon, leia esse meu post aqui e aí sim você vai entender meu ponto de vista. http://guj.com.br/posts/list/15/204519.java#1039241
Obvio que isso é um assunto que tem muito o que explorar, porém o espaço do texto no fórum é “pequeno” para isso, hehe.
Abraços
Sinto muito, mas nisto eu vou ter q discordar de vc, Garcia. Olha, para vc/v6 entenderem o meu ponto, é sugerida a (pelo menos 1 rápida) leitura do seguinte artigo:
http://www.javaworld.com/javaworld/jw-05-2001/jw-0518-encapsulation.html?page=1
Claro q não podemos tomar como lei universal (e irrevogável) tudo o q os autores falam: devemos ter senso crítico.
Mas, acho q podemos tirar boas lições (e dicas). Garcia, em outro post vc levantou interessantes aspectos: 1 deles é o “do Desenvolvedor UI q chama 1 ‘
User.getRoles().clear()’ e depois poderia salvar o User”. Sei q já estou começando a ir off-topic, mas não tem jeito:
[off-topic - ***]
para o atributo ‘roles’ (para não dizer bobo) seria estúpido disponibilizar um método ‘setRoles()’ => se o q realmente faz sentido é adicionar (ou remover) papeis de um Usuário. Isto é uma falha de Modelagem: não fizemos o ‘Hidding of Information’! E quanto ao ‘
User.getRoles()’, a falha é maior ainda, pois acabamos expondo a estrutura Interna (q poderia ser um array (de Role’s), um List, um Set, ou até mesmo um (Hash)Map) da Composição de Papeis de um Usuário; quando o correto seria (além de forncecer o métodos adicionar e remover) fornecer um método q retornasse, não a própria Referência do atributo (interno) Roles, mas uma cópia (um tipo de Clone) desta composição. Conseguem me compreender?!
Creio q devemos fazer um reflexão sobre o
design da Modelagem e Projeto q costumamos fazer no Desenvolvimento de nossas Aplicações.
Garcia, q tal abrimos um discussão s/ a questão do LazyInicializationException / Expor Objetos de DomainModel fora do Business-Core: poderiamos fazer isso usando o Pattern Memento, ou Prototype, ou ainda uma implementação (+) simples de um deles??! Ou quem sabe simplesmente usar o .clone() da API do Java, o q acha??!
[/off-topic - ***]
Ah e sobre:
garcia-jj:
Mas por um lado é bom termos lados opostos e expor nossas idéias na mesa, porém evitando cair em brigas.
Concordo plenamente contigo, pois a discussão leva ao crescimento! :thumbup: E sobre “brigas”:
no way! :shock: