<?xml version="1.0" encoding="ISO-8859-1"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Últimas mensagens do tópico "Encapsulamento"]]></title>
		<link>http://www.guj.com.br/posts/list/12.java</link>
		<description><![CDATA[Últimas mensagens enviadas no tópico "Encapsulamento"]]></description>
		<generator>JForum - http://www.jforum.net</generator>
			<item>
				<title>Encapsulamento</title>
				<description><![CDATA[ Oi pessoal, bom dia.<br /> <br /> Depois que o cv me instigou a ler mais sobre o assunto, encontrei o seguinte artigo, que deveria ter lido tempos atrás:<br /> <a class="snap_shots" href="http://www.javaworld.com/javaworld/jw-05-2001/jw-0518-encapsulation.html" target="_blank" rel="nofollow">http://www.javaworld.com/javaworld/jw-05-2001/jw-0518-encapsulation.html</a><br /> <br /> Nele, entre outras coisas, o autor afirma o seguinte:<br /> [quote]Encapsulation rule 1: Place data and the operations that perform on that data in the same class[/quote]<br /> <br /> Sendo assim, DAO não seria uma anti-pattern? Operações CRUD deveriam então ser realizadas dentro das próprias classes? Ou não?<br /> <br /> E analisando a evolução do código do autor, percebi o uso de getters e setters pode ser arriscado, então deve-se pensar algumas vezes e escrever o código com cuidado.<br /> <br /> Porém, ao usar frameworks como Hibernate, que provê muitas facilidades, o desenvolvedor é obrigado a definir getters/setters para todos os atributos a serem persistidos. E então? Usar ou não usar essas facilidades?<br /> <br /> Obrigado pessoal.<br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/109156.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/109156.java</link>
				<pubDate><![CDATA[Wed, 23 Feb 2005 11:16:37]]> GMT</pubDate>
				<author><![CDATA[ Filipe Sabella]]></author>
			</item>
			<item>
				<title>Encapsulamento</title>
				<description><![CDATA[ Colocar getters e setters pra satisfazer o framework nao te impede (bom, nao totalmente) de continuar com o encapsulamento bom - voce pode colocar as operacoes que lidam com aqueles dados na mesma classe mesmo assim.<br /> <br /> Sobre o DAO, de certa forma eh um anti-pattern do jeito que normalmente se ve feito por ai. Uma alternativa seria o ActiveRecord, do tio Fowler: <a class="snap_shots" href="http://patternshare.org/default.aspx/Home.MF.ActiveRecord" target="_blank" rel="nofollow">http://patternshare.org/default.aspx/Home.MF.ActiveRecord</a><br /> <br /> PS: avatar comedia <img src="http://www.guj.com.br/images/smilies/ed515dbff23a0ee3241dcc0a601c9ed6.gif" border="0">]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/109172.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/109172.java</link>
				<pubDate><![CDATA[Wed, 23 Feb 2005 11:39:40]]> GMT</pubDate>
				<author><![CDATA[ cv]]></author>
			</item>
			<item>
				<title>Re: Encapsulamento</title>
				<description><![CDATA[ Beleza, entendi o lance dos getters/setters.<br /> <br /> Mas cv, sobre o link que você me passou, bem ... como implementar isso de forma coerente?<br /> [code]class Pessoa() implements HibernateSessionAware<br /> {<br />     // ...<br />     public void save()<br />     {<br />         session.save( this );<br />     }<br /> }[/code]<br /> Isso?<br /> <br /> E como colocaria várias operações dentro de uma transação fazendo desta maneira? E se o meu domínio tem centenas de objetos, não fica meio complicado para manter essas classes que implementam ActiveRecord?<br /> <br /> Obrigado cv :D<br /> <br /> ps.: fala pro sr Flower aumentar o tamanho do texto do site dele :mrgreen:]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/109178.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/109178.java</link>
				<pubDate><![CDATA[Wed, 23 Feb 2005 11:49:18]]> GMT</pubDate>
				<author><![CDATA[ Filipe Sabella]]></author>
			</item>
			<item>
				<title>Re: Encapsulamento</title>
				<description><![CDATA[ E mais uma dúvida: métodos que filtram os dados e retornam coleções do objeto em questão deveriam estar contidos na mesma classe? Se não, onde??<br /> <br /> Lipe, que cada vez mais sabe que não sabe nada <img src="http://www.guj.com.br/images/smilies/283a16da79f3aa23fe1025c96295f04f.gif" border="0">]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/109211.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/109211.java</link>
				<pubDate><![CDATA[Wed, 23 Feb 2005 13:01:45]]> GMT</pubDate>
				<author><![CDATA[ Filipe Sabella]]></author>
			</item>
			<item>
				<title>Re: Encapsulamento</title>
				<description><![CDATA[ Voltando ao assunto do encapsulamento, outros artigos que causaram alguma polêmica foram estes do Allen Holub:<br /> <br /> [list][url=http://www.javaworld.com/javaworld/jw-09-2003/jw-0905-toolbox.html] Why getter and setter methods are evil [/url][/list]<br /> [list][url=http://www.javaworld.com/javaworld/jw-07-1999/jw-07-toolbox.html] Building user interfaces for object-oriented systems[/url][/list]<br /> <br /> Nesse último ele argumenta que MVC não é OO. Eu acho que ele se apega demais ao encapsulamento. É uma diretriz, não uma lei. De qq forma é uma boa leitura.<br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/110382.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/110382.java</link>
				<pubDate><![CDATA[Mon, 28 Feb 2005 19:01:50]]> GMT</pubDate>
				<author><![CDATA[ AllMighty]]></author>
			</item>
			<item>
				<title>Encapsulamento</title>
				<description><![CDATA[ Eh preciso saber absorver o conteudo de muitos desses artigos. Alguem pode ler e tomar atitudes "drasticas" se confiar cegamente no que o autor diz, aumentando a "complexidade da aplicacao" (ou qualquer outra coisa, nao vem mto ao caso) por querer seguir a risca todas as "boas praticas" que leu pela net. <br /> Fico imaginando a cena de alguem que acabou de ler o artigo onde eh argumentado que "mvc nao eh OO" e, por tal razao, declara a todos da equipe de desenvolvimento que "..nao vamos mais usar mvc pq ele nao eh oo". <br /> <br /> Rafael]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/110394.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/110394.java</link>
				<pubDate><![CDATA[Mon, 28 Feb 2005 19:56:25]]> GMT</pubDate>
				<author><![CDATA[ Rafael Steil]]></author>
			</item>
			<item>
				<title>Re: Encapsulamento</title>
				<description><![CDATA[ De fato, Rafael, é arriscado se fiar na opinião de qualquer um que escreve um artigo. Todo mundo precisa saber pensar sobre o que lê.<br /> <br /> O que eu achei interessante é o "absurdo" a que se chega quando se toma uma diretriz como se fosse um axioma absoluto. O projeto de um sistema envolve uma série de de escolhas de engenharia - se privilegia um aspecto em detrimento de outro. Isso talvez seja menos visível em software do que em outras áreas, porque as limitações físicas são muito menos importantes do que, por exemplo, ao se construir uma ponte. <br /> <br /> O Holub acha que encapsulamento é uma regra inviolável. Mas, como os milhões de programas escritos usando MVC desde o smalltalk-80 mostram, é possível obter sistemas elegantes e funcionais relaxando um pouco o encapsulamento. ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/110402.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/110402.java</link>
				<pubDate><![CDATA[Mon, 28 Feb 2005 20:55:30]]> GMT</pubDate>
				<author><![CDATA[ AllMighty]]></author>
			</item>
			<item>
				<title>Encapsulamento</title>
				<description><![CDATA[ Um dos pontos que o artigo da javaworld nao fala sobre os getters eh o "problema da imutabilidade" das classes. O que alguns alegam eh que, tendo getters como temos a maior parte do tempo, as classes podem ter o status alterado facilmente. Imagine um codigo como<br /> <br /> [code]<br /> class TimerDoSistema {<br />     private Date dataInterna;<br /> <br />     public void init() {<br />         this.dataInterna = new Date();<br />     }<br /> <br />     public Date getData() {<br />         return this.dataInterna;<br />     }<br /> }<br /> [/code]<br /> <br /> digamos que o a intencao era nao permitir que a data interna fosse alterada, e portando nao foi adicionado um setXxx(). O problema eh que, por estar o getData() retornando a referencia para a instancia da classe Date, qualquer metodo podera ser chamado, mudando as prpriedades internas:<br /> <br /> [code]<br /> TimerDoSistema t = new TimerDoSistema();<br /> t.init();<br /> <br /> // Altera a data<br /> t.getData().setTime(System.currentTimeMillis());<br /> [/code]<br /> <br /> A solucao para isso retornar uma copia ao inves da referencia. Porem, fazer isso somente "por fazer" - ou seja, sem a necessidade real de imutabilidade - somente teria resultados mais "desfavoraveis" que a favor. <br /> <br /> O problema, porem, eh fazer 90% dos desenvolvedores entender isso.<br /> <br /> Rafael]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/110404.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/110404.java</link>
				<pubDate><![CDATA[Mon, 28 Feb 2005 21:28:27]]> GMT</pubDate>
				<author><![CDATA[ Rafael Steil]]></author>
			</item>
			<item>
				<title>Encapsulamento</title>
				<description><![CDATA[ [quote=Rafael Steil]<br /> A solucao para isso retornar uma copia ao inves da referencia. Porem, fazer isso somente "por fazer" - ou seja, sem a necessidade real de imutabilidade - somente teria resultados mais "desfavoraveis" que a favor. <br /> <br /> O problema, porem, eh fazer 90% dos desenvolvedores entender isso.<br /> [/quote]<br /> <br /> Sei lá. Eu acho que imutabilidade na verdade deveria ser mais usada. Simplifica bastante o contrato da classe e vc não precisa se preocupar muito com mudança de hash-code. Além de poder dar alguma vantagem minuscula de performance (isso é secundário).<br /> <br /> edição: Ficar copiando na hora de entregar para o cliente geralmente quer dizer q a classe do objeto retornado deveria ter sido imutavel. Acho q foi mancada da sun fazer o Date mutável.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/110416.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/110416.java</link>
				<pubDate><![CDATA[Mon, 28 Feb 2005 21:55:33]]> GMT</pubDate>
				<author><![CDATA[ AllMighty]]></author>
			</item>
			<item>
				<title>Re: Encapsulamento</title>
				<description><![CDATA[ DAO pode ser visto como um antipattern, mas também é solução pro caso de classes "Canivete Suiço".<br /> <br /> Eu acho que encapsulamento não pode ser tudo ou nada, tem que existir uma maior liberdade para outros objetos colaboradores olharem por traz da cortina.<br /> <br /> Eu prefiro muito mais ter vários objetos colaborando entre sí que poucos objetos muito independentes. Essa é a velha discução de Coesão x Acoplamento e Spaghetti x Raviolli.<br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/110423.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/110423.java</link>
				<pubDate><![CDATA[Mon, 28 Feb 2005 22:16:02]]> GMT</pubDate>
				<author><![CDATA[ louds]]></author>
			</item>
			<item>
				<title>Re: Encapsulamento</title>
				<description><![CDATA[ Adorei ler o artigo, ótimo ver uma opinião bastante diferente do que se ve hoje em dia.<br /> <br /> Contudo, mandar meu objeto Candidato se gravar no reposítório de dados me cheira muito mal <img src="http://www.guj.com.br/images/smilies/1cfd6e2a9a2c0cf8e74b49b35e2e46c7.gif" border="0">]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/110440.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/110440.java</link>
				<pubDate><![CDATA[Tue, 1 Mar 2005 03:11:29]]> GMT</pubDate>
				<author><![CDATA[ Filipe Sabella]]></author>
			</item>
			<item>
				<title>Encapsulamento</title>
				<description><![CDATA[ Voce pode mandar seu objeto Candidato se gravar no banco de dados usando um CandidatoStore tal <img src="http://www.guj.com.br/images/smilies/8a80c6485cd926be453217d59a84a888.gif" border="0">]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/110445.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/110445.java</link>
				<pubDate><![CDATA[Tue, 1 Mar 2005 06:52:49]]> GMT</pubDate>
				<author><![CDATA[ cv]]></author>
			</item>
			<item>
				<title>Re: Encapsulamento</title>
				<description><![CDATA[ O problema de getters/setters é que eles foram criados para um modelo de componentes gambiarral (ou vocês realmente acham que JavaBeans não são uma gambiarra? Convenção de nomes só apra reflection?Habla sério...) que foge das boas práticas e tende para o aparecimento de objetos sem comportamento, só atributos.<br /> <br /> O uso de boas práticas ou não realmente é uma decisão muito séria, mas acho que deve-se conehcer o máximo possível para se saber quando usar e quando não usar.<br /> <br /> 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).<br /> <br /> Um DAO deve ler o estado de um objeto e persistí-lo, ou as outras letrinhas do CRUD. Extrair o estado de um objeto apenas com consultas quebra o encapsulamento (a menos que houvessem [url=http://www2.warnerbros.com/friendstv/index.html]"friends"[/url] em Java), mas uma solução para quem procura se manter nas boas práticas é aplicar o pattern [url=http://home.earthlink.net/~huston2/dp/memento.html]Memento[/url]  e persistir o Memento. Isso é meio trabalhoso e agrega uma complexidade que, na prática, só vai ser útil para se persistir o objeto.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/110479.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/110479.java</link>
				<pubDate><![CDATA[Tue, 1 Mar 2005 09:26:55]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Re: Encapsulamento</title>
				<description><![CDATA[ [quote=pcalcado]...age na impedância (cadê o link apra aquele outro tópico?). [/quote]<br /> <br />   Este? <a class="snap_shots" href="http://www.guj.com.br/posts/list/20496.java" target="_blank" rel="nofollow">http://www.guj.com.br/posts/list/20496.java</a><br /> <br />   ]['s]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/110496.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/110496.java</link>
				<pubDate><![CDATA[Tue, 1 Mar 2005 09:52:25]]> GMT</pubDate>
				<author><![CDATA[ fabio.patricio]]></author>
			</item>
			<item>
				<title>Re: Encapsulamento</title>
				<description><![CDATA[ cv, e nos casos de outras consultas que retornam coleções de objetos Candidato? Em que lugar enfio estes métodos sem doer?<br /> <br /> Estou lendo o segundo artigo que o AllMighty postou, estou até achando perigoso de tanto que estou adorando o que o cara está escrevendo. Faz um monte de sentido pra mim <img src="http://www.guj.com.br/images/smilies/283a16da79f3aa23fe1025c96295f04f.gif" border="0">]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/110502.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/110502.java</link>
				<pubDate><![CDATA[Tue, 1 Mar 2005 10:00:59]]> GMT</pubDate>
				<author><![CDATA[ Filipe Sabella]]></author>
			</item>
			<item>
				<title>Encapsulamento</title>
				<description><![CDATA[ O ActiveRecord (do Ruby On Rails, nao o Pattern) faz algo mais ou menos assim (traduzindo pra Java, e eu nao sei se acertei na sintaxe um-ponto-cincozenta):<br /> <br /> [code]<br /> public class Base&lt;T extends Base&gt; {<br /> <br />   public static T find(int id) { ... }<br />   public static Collection&lt;T&gt; find_by_example(T example) { ... }<br />   public static Collection&lt;T&gt; find_by_...<br /> <br />   public T save() { ... }<br /> }<br /> <br /> <br /> public class Candidato extends Base&lt;Candidato&gt; {<br />   private String nome;<br />   public void setNome(String nome) { ... }<br />   public String getNome() { ... }<br /> }[/code]<br /> <br /> dai, em algum outro lugar....<br /> <br /> [code]Collection&lt;Candidato&gt; foo = Candidato.find(1);<br /> foo.setNome("Coelhinho da Pascoa");<br /> foo.save();[/code]<br /> <br /> Fica bonitinho, IMHO :mrgreen:]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/110514.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/110514.java</link>
				<pubDate><![CDATA[Tue, 1 Mar 2005 11:16:27]]> GMT</pubDate>
				<author><![CDATA[ cv]]></author>
			</item>
			<item>
				<title>Re: Encapsulamento</title>
				<description><![CDATA[   Olá,<br /> <br />   Interessante esta abordagem. Recentemente montei uma arquitetura pra um sistema que to fazendo e tinha feito algo semelhante.<br />   A parte do save, update, etc eu fiz deste jeito mesmo sem VO e direto no proprio Bean, usando uns commands pra isso.  Algo tipo:<br /> <br /> [code]public class User extends Bean<br />   private String name;<br />   private String lastName;<br />   ...<br />   public void addUser() {<br />     this.session.save(this);<br />   }<br /> [/code]<br /> <br />   Onde este atributo session é a implementacao de um interface que criei e tem somente os atributos save, update, delete, get e find. Somente ela reconhece o Dao. <br />   Para a parte das consultas tava usando um ValueListHandle que era usado pelo meu Bean para realizar os find com as restricoes mais especificas.  Nao ta gostando pq ia ter que ficar criando as classes do ValueListHandle dentro do bean e propagar a Session. Do jeito que o CV mostrou acho que resolvo meu problema com poucas alteracoes.  :P <br /> <br />   O que acham desse modelo?  :wink: <br /> <br />   ]['s]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/110522.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/110522.java</link>
				<pubDate><![CDATA[Tue, 1 Mar 2005 11:39:58]]> GMT</pubDate>
				<author><![CDATA[ fabio.patricio]]></author>
			</item>
			<item>
				<title>Re: Encapsulamento</title>
				<description><![CDATA[ Poxa, chiquérrimo usando Generics. Ainda não me acostumei a pensar solução utilizando este recurso.<br /> <br /> *babando*<br /> <br /> Contudo, por que um objeto Candidato deveria ser responsável por buscar coleções de outros Candidatos? Por que ele deveria guardar informação sobre qual tipo de Candidato o usuário quer buscar?<br /> <br /> E, nesse modelo, como sera possível alterar a classe Base para uma estrutura completamente diferente, baseado numa interface? Não seria melhor algo como<br /> [code]<br />  public class Candidato  {<br />    private Base&lt;Candidato&gt; base = factory.getBase();<br /> <br />    private String nome;<br />    public void setNome(String nome) { ... }<br />    public String getNome() { ... }<br />  }<br /> [/code]<br /> sendo Base uma Interface?<br /> <br /> cv, obrigadíssimo pelo exemplo, vou usá-lo :D]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/110523.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/110523.java</link>
				<pubDate><![CDATA[Tue, 1 Mar 2005 11:40:25]]> GMT</pubDate>
				<author><![CDATA[ Filipe Sabella]]></author>
			</item>
			<item>
				<title>Encapsulamento</title>
				<description><![CDATA[ O problema de fazer usando delegacao ao inves de heranca eh que vc tem que declarar os metodos estaticos <img src="http://www.guj.com.br/images/smilies/9d71f0541cff0a302a0309c5079e8dee.gif" border="0"><br /> <br /> Eu nao sei se rola usar generics em metodos estaticos, alias... se nao der, a ideia do ActiveRecord nao fica tao legal, mas mesmo assim da pra aproveitar. <img src="http://www.guj.com.br/images/smilies/283a16da79f3aa23fe1025c96295f04f.gif" border="0"><br /> <br /> Por ultimo, concordo que usar um objeto Candidato pra buscar outros, mas usar a [b]classe[/b] Candidato pra buscar fica chique - metodos estaticos bonitinhos e tal <img src="http://www.guj.com.br/images/smilies/ed515dbff23a0ee3241dcc0a601c9ed6.gif" border="0">]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/110534.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/110534.java</link>
				<pubDate><![CDATA[Tue, 1 Mar 2005 11:56:03]]> GMT</pubDate>
				<author><![CDATA[ cv]]></author>
			</item>
			<item>
				<title>Re: Encapsulamento</title>
				<description><![CDATA[ Ah gostei <img src="http://www.guj.com.br/images/smilies/283a16da79f3aa23fe1025c96295f04f.gif" border="0"> fez sentido pra mim \o/ eeee<br /> <br /> Obrigado mesmo cv <img src="http://www.guj.com.br/images/smilies/283a16da79f3aa23fe1025c96295f04f.gif" border="0"><br /> <br /> Agora o problema grave é mandar esse mega bombado objeto pela rede hehe que tal usar DTO?<br /> *é esafqueaod por shoes*<br /> <br /> <img src="http://www.guj.com.br/images/smilies/ed515dbff23a0ee3241dcc0a601c9ed6.gif" border="0"><br /> <br /> Procurei o livro do Martim Flower, POOEOoepP, mas não encontrei nada e [b]não[/b] vou comprar ele agora <img src="http://www.guj.com.br/images/smilies/1cfd6e2a9a2c0cf8e74b49b35e2e46c7.gif" border="0">]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/110541.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/110541.java</link>
				<pubDate><![CDATA[Tue, 1 Mar 2005 12:05:43]]> GMT</pubDate>
				<author><![CDATA[ Filipe Sabella]]></author>
			</item>
			<item>
				<title>Re: Encapsulamento</title>
				<description><![CDATA[ [quote=LIPE]Agora o problema grave é mandar esse mega bombado objeto pela rede hehe que tal usar DTO?<br /> *é esafqueaod por shoes*[/quote]<br /> <br />   Tudo bonitinho pra chegar no final e querer usar DTO.<br />   Naoooooooooooo <img src="http://www.guj.com.br/images/smilies/ed515dbff23a0ee3241dcc0a601c9ed6.gif" border="0"><br /> <br />   Fiquei so com uma duvida sobre o que o CV postou. Quando tu fala:<br /> <br />   [quote="cv"]O problema de fazer usando delegacao ao inves de heranca eh que vc tem que declarar os metodos estaticos[/quote]<br /> <br />   Era sobre o que eu tinha postado ou do LIPE?<br /> <br />    <img src="http://www.guj.com.br/images/smilies/8a80c6485cd926be453217d59a84a888.gif" border="0"> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/110544.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/110544.java</link>
				<pubDate><![CDATA[Tue, 1 Mar 2005 12:09:25]]> GMT</pubDate>
				<author><![CDATA[ fabio.patricio]]></author>
			</item>
			<item>
				<title>Re: Encapsulamento</title>
				<description><![CDATA[ É sobre o próprio exemplo dele creio eu eheh<br /> <br /> Quanto à sua implementação fabgp, quem fornecia o objeto session para os Objetos? E como você poderia colocar todos os comandos dentro de uma transação?]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/110545.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/110545.java</link>
				<pubDate><![CDATA[Tue, 1 Mar 2005 12:22:02]]> GMT</pubDate>
				<author><![CDATA[ Filipe Sabella]]></author>
			</item>
			<item>
				<title>Re: Encapsulamento</title>
				<description><![CDATA[ [quote=LIPE]É sobre o próprio exemplo dele creio eu eheh[/quote]<br /> <br />   Ha, agora entendi.<br /> <br /> [quote=LIPE]Quanto à sua implementação fabgp, quem fornecia o objeto session para os Objetos? E como você poderia colocar todos os comandos dentro de uma transação?[/quote]<br /> <br />    Essa arquitetura eu usei em um sisteminha com WW, a Session ta sendo disponibilizada pela minha classe Transaction que é criada com um interceptor para as actions e ele seta na minha super-action a instancia dessa transaction.<br />   Depois a session é passada para o bean quando vou executar algo neles.<br /> <br />   Tem algumas coisas que nao gostei do modo que montei, mas ainda nao vi uma maneira eficiente de fazer isso. To pensando em como mudar ainda.  <img src="http://www.guj.com.br/images/smilies/c30b4198e0907b23b8246bdd52aa1c3c.gif" border="0"> <br /> <br />   ]['s]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/110555.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/110555.java</link>
				<pubDate><![CDATA[Tue, 1 Mar 2005 13:05:13]]> GMT</pubDate>
				<author><![CDATA[ fabio.patricio]]></author>
			</item>
			<item>
				<title>Re: Encapsulamento</title>
				<description><![CDATA[ Ah, você provê o objeto session via IoC, isso?<br /> <br /> Mas assim fica bem ruim para ter um controle melhor das transações envolvidas, não? Penso assim pois no sistema atual fiz algo semelhante, e quando precisei colocar ações em transações diferentes foi meio dolorido.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/110558.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/110558.java</link>
				<pubDate><![CDATA[Tue, 1 Mar 2005 13:11:17]]> GMT</pubDate>
				<author><![CDATA[ Filipe Sabella]]></author>
			</item>
			<item>
				<title>Re: Encapsulamento</title>
				<description><![CDATA[ [quote=LIPE]Agora o problema grave é mandar esse mega bombado objeto pela rede hehe que tal usar DTO?[/quote]<br /> <br /> Precisa [b]mesmo[/b] mandar ele pela rede? Hmm. Merda. Bom, pega o BeanUtils, taca tudo num HashMap, e passa pela rede. Depois recupera, e tchararaaaaaam! <img src="http://www.guj.com.br/images/smilies/ed515dbff23a0ee3241dcc0a601c9ed6.gif" border="0"><br /> <br /> &lt;/solucao-porca&gt;<br /> <br /> Se o caso for mandar um objeto pesado pela rede e isso REALMENTE for um problema, DTO eh uma boa ideia. Mas, de novo: DTO [b]so[/b] serve quando voce tem [b]problemas[/b] em passar um objeto pela rede. Entao, antes de usar DTO, voce precisa provar pra si mesmo que o objeto eh grande demais e vai impactar a performance da aplicacao, e olhar pro codigo e falar "argh, ta grande" nao eh uma dessas maneiras.<br /> <br /> Um jeitinho massa de saber se voce precisa fazer um DTO ou se vc pode continuar a viver sem a ajuda de aparelhos depois da visitinha do Shoes eh serializar o objeto que vc acha que eh "gordo" demais num arquivo, e ver o tamanho dele. Depois serializar uma quantidade significativa deles, e tirar uma media. Dai da pra ter uma ideia de quantos objetos vc vai conseguir passar pela rede sem melar tudo. <img src="http://www.guj.com.br/images/smilies/8a80c6485cd926be453217d59a84a888.gif" border="0">]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/110560.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/110560.java</link>
				<pubDate><![CDATA[Tue, 1 Mar 2005 13:18:00]]> GMT</pubDate>
				<author><![CDATA[ cv]]></author>
			</item>
			<item>
				<title>Re: Encapsulamento</title>
				<description><![CDATA[ [quote=LIPE]Ah, você provê o objeto session via IoC, isso?[/quote]<br /> <br />   Isso.<br /> <br /> [quote=LIPE]Mas assim fica bem ruim para ter um controle melhor das transações envolvidas, não? Penso assim pois no sistema atual fiz algo semelhante, e quando precisei colocar ações em transações diferentes foi meio dolorido.[/quote]<br /> <br />   Açoes tu diz, um save e um delete por exemplo na mesma Transacao?<br /> Nao cheguei a precisar disso, mas confesso que nem tinha pensado nessa possibilidade. Se for isso é bom eu pensar e ver o impacto disso. hehehehe<br />   Se for isso tu achou uma solucao sem doer muito? <img src="http://www.guj.com.br/images/smilies/ed515dbff23a0ee3241dcc0a601c9ed6.gif" border="0"><br /> <br />   ]['s]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/110565.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/110565.java</link>
				<pubDate><![CDATA[Tue, 1 Mar 2005 13:23:40]]> GMT</pubDate>
				<author><![CDATA[ fabio.patricio]]></author>
			</item>
			<item>
				<title>Re: Encapsulamento</title>
				<description><![CDATA[ [quote=cv][<br /> Um jeitinho massa de saber se voce precisa fazer um DTO ou se vc pode continuar a viver sem a ajuda de aparelhos depois da visitinha do Shoes eh serializar o objeto que vc acha que eh "gordo" demais num arquivo, e ver o tamanho dele. Depois serializar uma quantidade significativa deles, e tirar uma media. Dai da pra ter uma ideia de quantos objetos vc vai conseguir passar pela rede sem melar tudo. <img src="http://www.guj.com.br/images/smilies/8a80c6485cd926be453217d59a84a888.gif" border="0">[/quote]<br /> <br />   Estes tempos eu fiz um teste semelhante a este, achava que tinha uma colecao de objetos extremamente "gorda", mas o java me desmentiu na lata.   <img src="http://www.guj.com.br/images/smilies/97ada74b88049a6d50a6ed40898a03d7.gif" border="0"> <br /> <br />   ]['s]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/110566.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/110566.java</link>
				<pubDate><![CDATA[Tue, 1 Mar 2005 13:25:15]]> GMT</pubDate>
				<author><![CDATA[ fabio.patricio]]></author>
			</item>
			<item>
				<title>Re: Encapsulamento</title>
				<description><![CDATA[ O lance do DTO entendi <img src="http://www.guj.com.br/images/smilies/283a16da79f3aa23fe1025c96295f04f.gif" border="0"><br /> fabgt, usei uma gambiarra. Nada bonito.<br /> <br /> <br /> Mais uma dúvida, também em relação à tarefas normalmente realizadas por um DAO: e se uma consulta retorna 2 ou mais tipos de objetos completamente diferentes? Quem deve ser repsonsável pela coisa toda?<br /> <br /> No caso de UIs que envolvam mais de um tipo de objeto, sem problemas. Uma classe fica responsável por montar a coisa toda. Seria o mesmo princípio aplicável para o problema acima? Criar uma classe gerenciadora para esses casos especiais? Mas isso não seria um DAO?<br /> <br />  <img src="http://www.guj.com.br/images/smilies/0a4d7238daa496a758252d0a2b1a1384.gif" border="0">  <img src="http://www.guj.com.br/images/smilies/0a4d7238daa496a758252d0a2b1a1384.gif" border="0">  <img src="http://www.guj.com.br/images/smilies/0a4d7238daa496a758252d0a2b1a1384.gif" border="0">]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/110580.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/110580.java</link>
				<pubDate><![CDATA[Tue, 1 Mar 2005 14:03:19]]> GMT</pubDate>
				<author><![CDATA[ Filipe Sabella]]></author>
			</item>
			<item>
				<title>Encapsulamento</title>
				<description><![CDATA[ Acho que eu nunca vi uma consulta que retorna mais de um objeto diferente, e esses objetos nao tem relacao nenhuma... ja vi umas queries que retornam um monte de itens, de imagens a blocos de texto, mas todos os itens sao... errr, uhhm, filhos da classe Item <img src="http://www.guj.com.br/images/smilies/ed515dbff23a0ee3241dcc0a601c9ed6.gif" border="0">]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/110630.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/110630.java</link>
				<pubDate><![CDATA[Tue, 1 Mar 2005 16:03:49]]> GMT</pubDate>
				<author><![CDATA[ cv]]></author>
			</item>
			<item>
				<title>Re: Encapsulamento</title>
				<description><![CDATA[ Tem razão <img src="http://www.guj.com.br/images/smilies/283a16da79f3aa23fe1025c96295f04f.gif" border="0"> não faz o menor sentido minha pergunta<br /> <br /> [img]http://www.patandkat.com/pat/weblog/images/bright-idea-beej-sm.jpg[/img]]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/110633.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/110633.java</link>
				<pubDate><![CDATA[Tue, 1 Mar 2005 16:08:34]]> GMT</pubDate>
				<author><![CDATA[ Filipe Sabella]]></author>
			</item>
			<item>
				<title>Encapsulamento</title>
				<description><![CDATA[ ROFFLE LOLZOR BONUS POINTS A++++ WOULD DO BUSINESS AGAIN!!!!!!!!!111 pra essa camiseta do Spinal Tap <img src="http://www.guj.com.br/images/smilies/ed515dbff23a0ee3241dcc0a601c9ed6.gif" border="0"><br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/110663.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/110663.java</link>
				<pubDate><![CDATA[Tue, 1 Mar 2005 17:26:16]]> GMT</pubDate>
				<author><![CDATA[ cv]]></author>
			</item>
			<item>
				<title>Encapsulamento</title>
				<description><![CDATA[ [quote=cv]Acho que eu nunca vi uma consulta que retorna mais de um objeto diferente, e esses objetos nao tem relacao nenhuma... ja vi umas queries que retornam um monte de itens, de imagens a blocos de texto, mas todos os itens sao... errr, uhhm, filhos da classe Item <img src="http://www.guj.com.br/images/smilies/ed515dbff23a0ee3241dcc0a601c9ed6.gif" border="0">[/quote]<br /> <br /> Eu já, quer um bom exemplo?<br /> <br /> Dada a seguinte query "me retorne os últimos registros que o usuario alterou", ela não retorna os Rastros do usuario, mas sim os DO em questão.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/110684.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/110684.java</link>
				<pubDate><![CDATA[Tue, 1 Mar 2005 17:57:54]]> GMT</pubDate>
				<author><![CDATA[ louds]]></author>
			</item>
			<item>
				<title>Re: Encapsulamento</title>
				<description><![CDATA[ O louds é foda <img src="http://www.guj.com.br/images/smilies/283a16da79f3aa23fe1025c96295f04f.gif" border="0"><br /> <br /> Mas num caso desses o SGBD iria fazer um full scan em todas as tabelas @.@<br /> <br /> Não seria uma solução mais apropriada fazer uma tabela de logging, muito bem representável por um objeto?<br /> <br /> E considerando a situação que você apresentou, como seria adequado representar este comportamento dentro do sistema?]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/110703.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/110703.java</link>
				<pubDate><![CDATA[Tue, 1 Mar 2005 19:23:47]]> GMT</pubDate>
				<author><![CDATA[ Filipe Sabella]]></author>
			</item>
			<item>
				<title>Encapsulamento</title>
				<description><![CDATA[ *Entrando na discussão...<br /> <br /> Eu faria um log com os ids alterados. Depois recuperaria eles e iria em cada lugar pegar eles.. <img src="http://www.guj.com.br/images/smilies/283a16da79f3aa23fe1025c96295f04f.gif" border="0"><br /> <br /> <br /> Só pra não passar em branco, eu tb uso o mesmo modelo de Bean do Fabio : cada qual herda do Master o "script de CRUD" o qual retornado, eu pego uma SessionFactory e passo pra ela executar.... meio doido, mas funciona <img src="http://www.guj.com.br/images/smilies/283a16da79f3aa23fe1025c96295f04f.gif" border="0"> <br /> Hnum, To usando tudo isso com Swing tah, e isso me deixa livre pra fazer uma interface pra apresentar o bean bunitinho na tela <img src="http://www.guj.com.br/images/smilies/283a16da79f3aa23fe1025c96295f04f.gif" border="0"><br /> <br /> Mas to gostando da discussão... <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/110712.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/110712.java</link>
				<pubDate><![CDATA[Tue, 1 Mar 2005 20:11:12]]> GMT</pubDate>
				<author><![CDATA[ brlima]]></author>
			</item>
			<item>
				<title>Re: Encapsulamento</title>
				<description><![CDATA[ brlima, aconselho a ler o segundo artigo indicado pelo AllMighty. O treco é bom <img src="http://www.guj.com.br/images/smilies/283a16da79f3aa23fe1025c96295f04f.gif" border="0"><br /> <br /> Morte ao MVC!<br /> *facilmente convertido*<br /> <br /> <img src="http://www.guj.com.br/images/smilies/ed515dbff23a0ee3241dcc0a601c9ed6.gif" border="0">]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/110714.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/110714.java</link>
				<pubDate><![CDATA[Tue, 1 Mar 2005 20:22:43]]> GMT</pubDate>
				<author><![CDATA[ Filipe Sabella]]></author>
			</item>
			<item>
				<title>Re: Encapsulamento</title>
				<description><![CDATA[ [quote=LIPE]Morte ao MVC!<br /> *facilmente convertido*[/quote]<br /> <br />  Qual é o slogan agora? <img src="http://www.guj.com.br/images/smilies/ed515dbff23a0ee3241dcc0a601c9ed6.gif" border="0">]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/110727.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/110727.java</link>
				<pubDate><![CDATA[Tue, 1 Mar 2005 21:24:28]]> GMT</pubDate>
				<author><![CDATA[ fabio.patricio]]></author>
			</item>
			<item>
				<title>Re: Encapsulamento</title>
				<description><![CDATA[ [quote=LIPE]O louds é foda <img src="http://www.guj.com.br/images/smilies/283a16da79f3aa23fe1025c96295f04f.gif" border="0"><br /> <br /> Mas num caso desses o SGBD iria fazer um full scan em todas as tabelas @.@<br /> <br /> Não seria uma solução mais apropriada fazer uma tabela de logging, muito bem representável por um objeto?<br /> <br /> E considerando a situação que você apresentou, como seria adequado representar este comportamento dentro do sistema?[/quote]<br /> <br /> Eu já implementei auditoria de 2 formas diferentes, cada qual tinha suas exigencias.<br /> <br /> Uma foi usando shadow-tables, era bem facil gerar os dados de auditoria mas era uma saco usar essa informação. A outra foi usando uma tabela só com um campo clob com os valores em pares chave-valor, usa 1 tonelada de disco, mas fica mais facil de pesquisar e implementar usando interceptor do Hibernate foi assustadoramente facil.<br /> <br /> Enfim, quanto a query, em ambos os casos os DAOs reconstruiam os DO a partir das informações recuperadas, no final das contas retornavam coleções de objetos heterogêneos mesmo. Existia um AutoriaDao que tinha esses métodos de pesquisa. Eu gosto de criar  DAOs por casos de uso e não por DO que são partícipes.<br /> <br /> E não tem full-table scan não lipe, vale lembrar que o modelo de dados e o modelo dos objetos de dominio não precisam ser parecidos ou ter coisas equivalentes, basta saber ir de um pro outro.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/110732.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/110732.java</link>
				<pubDate><![CDATA[Tue, 1 Mar 2005 21:50:38]]> GMT</pubDate>
				<author><![CDATA[ louds]]></author>
			</item>
			<item>
				<title>Re: Encapsulamento</title>
				<description><![CDATA[ Então louds, o "objetivo" aqui seria não usar DAOs hehe mas sem um objeto intermediário aos dois Objetos não relacionados fica difícil.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/110818.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/110818.java</link>
				<pubDate><![CDATA[Wed, 2 Mar 2005 10:37:07]]> GMT</pubDate>
				<author><![CDATA[ Filipe Sabella]]></author>
			</item>
			<item>
				<title>Re: Encapsulamento</title>
				<description><![CDATA[ [quote=LIPE]Então louds, o "objetivo" aqui seria não usar DAOs hehe mas sem um objeto intermediário aos dois Objetos não relacionados fica difícil.[/quote]<br /> <br />   Por isso eu nao gosto muito de mapear 1 pra 1, uma tabela pra um objeto, nem sempre isso faz sentido com a real necessidade do sistema. Esse exemplo que o Louds deu é um classico onde teu objeto nao tem nada haver com as tabelas do banco.<br />   Acredito que o dominio do objetos deve ficar independete disso, satisfazendo a tua necessidade para as regras de negocio do sistema e o DAO que se vire pra retornar isso coerentemente.  <img src="http://www.guj.com.br/images/smilies/8a80c6485cd926be453217d59a84a888.gif" border="0"><br /> <br />   ]['s]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/110831.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/110831.java</link>
				<pubDate><![CDATA[Wed, 2 Mar 2005 10:49:56]]> GMT</pubDate>
				<author><![CDATA[ fabio.patricio]]></author>
			</item>
			<item>
				<title>Re: Encapsulamento</title>
				<description><![CDATA[ Um bom exemplo disso é se você estiver trabalhando com OLAP ou com alguma forma de estatística, teu dominio muito provavelmente vai ter objetos que são agrupamentos de registros do banco.<br /> <br /> A alternativa satisfatoria pro DAO, é ORM no estilo do Hibernate usando xdocklet ou annotations, uma pena apenas que ele te obriga a ter getters/setters.<br /> <br /> Uma idéia que eu achei muito legal foi uma do Charles Miller de usar IoC para as pesquisas que o teu objeto precisa.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/111030.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/111030.java</link>
				<pubDate><![CDATA[Wed, 2 Mar 2005 18:43:11]]> GMT</pubDate>
				<author><![CDATA[ louds]]></author>
			</item>
			<item>
				<title>Re: Encapsulamento</title>
				<description><![CDATA[ [quote=louds]Uma idéia que eu achei muito legal foi uma do Charles Miller de usar IoC para as pesquisas que o teu objeto precisa.[/quote]<br /> <br />   Tem algum artigo sobre louds?<br /> <br />   ]['s]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/111034.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/111034.java</link>
				<pubDate><![CDATA[Wed, 2 Mar 2005 19:02:36]]> GMT</pubDate>
				<author><![CDATA[ fabio.patricio]]></author>
			</item>
			<item>
				<title>Re: Encapsulamento</title>
				<description><![CDATA[ fabgp2001, que tal o blog dele, de onde li sobre isso?  <img src="http://www.guj.com.br/images/smilies/3b63d1616c5dfcf29f8a7a031aaa7cad.gif" border="0"> <br /> <br /> [url]http://fishbowl.pastiche.org/2004/04/04/cut_with_the_grain[/url]]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/111048.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/111048.java</link>
				<pubDate><![CDATA[Wed, 2 Mar 2005 20:28:44]]> GMT</pubDate>
				<author><![CDATA[ louds]]></author>
			</item>
			<item>
				<title>Encapsulamento</title>
				<description><![CDATA[ E o que fazer com a coleção heterogênea de objetos? Se eles não implementarem ao menos uma interface em comum, o máximo de informação que podem dar é um toString()? Tem alguma mágica de reflexão?<br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/111714.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/111714.java</link>
				<pubDate><![CDATA[Sat, 5 Mar 2005 03:36:50]]> GMT</pubDate>
				<author><![CDATA[ AllMighty]]></author>
			</item>
			<item>
				<title>Re: Encapsulamento</title>
				<description><![CDATA[ QUANTO A TRANSAÇÕES... sei que é uma discução um tanto quanto antiga, mas achei o assunto legal e gostaria de compartilhar uma solução...<br /> <br /> [code]<br /> public ActionForward gravar(ActionMapping mapping, ActionForm form,<br />         HttpServletRequest request, HttpServletResponse response) throws Exception {<br />     <br />     DynaActionForm atividadeForm = (DynaActionForm)form;<br />     Atividade      atividade     = null;<br />     <br />     SystemUserSession   systemUserSession   = new SystemUserSession(request);<br />     BusinessTransaction businessTransaction = getBusinessTransactionFactory().createNewBusinessTransaction((SystemUser)systemUserSession.getModel());<br />     <br />     try {<br />         businessTransaction.start();<br /> <br />         AtividadeBusiness atividadeBusiness = new AtividadeBusiness(businessTransaction);<br />         <br />         atividade = (Atividade)atividadeBusiness.newEntityInstance(<br />                 ((Long)atividadeForm.get("idAtividade")).longValue()<br />         );<br />         BeanUtils.copyProperties(atividade, atividadeForm);<br /> <br />         try {<br />             businessTransaction.beginTransactionalBlock();<br /> <br />             atividadeBusiness.save(atividade);<br />             <br />             businessTransaction.commitTransactionalBlock();<br />         } catch (BusinessTransactionException bte) {<br />             businessTransaction.rollbackTransactionalBlock();<br /> <br />             setAlertMessage(request, be.getMessage());<br />         }           <br />     } finally {<br />         businessTransaction.finish();<br />     }<br />     <br />     atividadeForm.initialize(mapping);<br />     <br />     return mapping.findForward("_FormAtividade");        <br /> }<br /> [/code]<br /> <br /> Nessa solução que implementei na arquitetura que desenvolvi para fabrica de software que trabalho, criei uma classe responsavel por controlar o escopo (start/finish) e as ações (begin/commit/rollback) das trasações de negócio do sistema.<br /> <br /> O fluxo é o seguinte...<br /> <br /> 1. [b]start()[/b] - cria uma sessão SessionFactory.<br /> 2. Vários business-objects podem ser instanciados passando a instância "startada" de [b]businessTransaction[/b] e manipulados.<br /> 3. [b]beginTransactionalBlock()[/b] - inicia uma transação do Hibernate (session.beginTransaction()).<br /> (save/remove/get/anyMethod).<br /> 5. [b]businessTransaction.commitTransactionalBlock() ou businessTransaction.rollbackTransactionalBlock()[/b] - comita ou descarta a trasação do Hibernate.<br /> 6. [b]businessTransaction.finish()[/b] - encerra a sessão do Hibernate.<br /> <br /> Obviamente que existem outras classes e interfaces envolvidas na parada, mas o conceito é esse.<br /> <br /> Da maneira como estruturei essa arquitetura, fica bastante fácil se amanhã ou depois eu não quiser mais utilizar o Hibernate e passar a usar um outro mecanismo de persistencia, porque toda a estrutura está baseada em [b]interfaces[/b].<br /> <br /> Bom espero que ajude... espliquei bem por cima, como disse, tem várias classes e interfaces envolvidas, mas acho que deu para enternder o conceito, né?<br /> <br /> Sei que ainda tem várias coisas para serem melhoradas e estou trabalhando todos os dias para fazer isso...  :D  ...sugestões são bem vindas...<br /> <br /> Abraço!]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/113217.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/113217.java</link>
				<pubDate><![CDATA[Fri, 11 Mar 2005 18:33:07]]> GMT</pubDate>
				<author><![CDATA[ le-silva]]></author>
			</item>
			<item>
				<title>Encapsulamento</title>
				<description><![CDATA[ [quote=AllMighty]E o que fazer com a coleção heterogênea de objetos? Se eles não implementarem ao menos uma interface em comum, o máximo de informação que podem dar é um toString()? Tem alguma mágica de reflexão?<br /> <br /> [/quote]<br /> <br /> No meu caso eu tinha 1 factory de helpers que providenciavam a view e outras colaborações.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/113226.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/113226.java</link>
				<pubDate><![CDATA[Fri, 11 Mar 2005 19:45:28]]> GMT</pubDate>
				<author><![CDATA[ louds]]></author>
			</item>
			<item>
				<title>Encapsulamento</title>
				<description><![CDATA[ [quote=cv]<br /> Sobre o DAO, de certa forma eh um anti-pattern do jeito que normalmente se ve feito por ai.<br /> [/quote]<br /> <br /> qual o jeito certo d fazer DAOs <img src="http://www.guj.com.br/images/smilies/136dd33cba83140c7ce38db096d05aed.gif" border="0"> ?]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/232100.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/232100.java</link>
				<pubDate><![CDATA[Fri, 20 Oct 2006 02:12:52]]> GMT</pubDate>
				<author><![CDATA[ Lich King]]></author>
			</item>
			<item>
				<title>Encapsulamento</title>
				<description><![CDATA[ [quote=cv]O ActiveRecord (do Ruby On Rails, nao o Pattern) faz algo mais ou menos assim (traduzindo pra Java, e eu nao sei se acertei na sintaxe um-ponto-cincozenta):<br /> <br /> [code]<br /> public class Base&lt;T extends Base&gt; {<br /> <br />   public static T find(int id) { ... }<br />   public static Collection&lt;T&gt; find_by_example(T example) { ... }<br />   public static Collection&lt;T&gt; find_by_...<br /> <br />   public T save() { ... }<br /> }[/code]<br /> [/quote]<br /> <br /> Em java num da pra usar generics em metodos Static!  :( ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/260213.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/260213.java</link>
				<pubDate><![CDATA[Tue, 9 Jan 2007 17:47:59]]> GMT</pubDate>
				<author><![CDATA[ brunohansen]]></author>
			</item>
			<item>
				<title>Re:Encapsulamento</title>
				<description><![CDATA[ Eu também já fiquei um pouco confuso com a questão dos objetos getters e setters. O que mais vejo são os programadores colocando os atributos como private e depois criando métodos set e get. A idéia do encapsulamento não seria esconder dos outros objetos, a forma como foi escolhida para representar um dado. <br /> <br /> Por exemplo, se eu tenho uma classe chamada Turma que usa um ArrayList ou uma Hashtable para guardar os alunos:<br />  <br /> private ArrayList alunos; <br /> <br /> e criar um método getAlunos que retorna esse ArrayList, não seria a mesma coisa que deixar o atributo alunos como público?]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/20668/480437.java</guid>
				<link>http://www.guj.com.br/posts/preList/20668/480437.java</link>
				<pubDate><![CDATA[Sat, 3 May 2008 17:34:36]]> GMT</pubDate>
				<author><![CDATA[ David Steinbruch]]></author>
			</item>
	</channel>
</rss>