<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Nosso modelo de objetos não deve ser uma cópia do nosso modelo de dados</title>
	<atom:link href="http://www.sagadoprogramador.com.br/2009/07/nosso-modelo-de-objetos-nao-deve-ser-uma-copia-do-nosso-modelo-de-dados/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.sagadoprogramador.com.br/2009/07/nosso-modelo-de-objetos-nao-deve-ser-uma-copia-do-nosso-modelo-de-dados/</link>
	<description></description>
	<lastBuildDate>Thu, 28 Jul 2011 09:44:43 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<item>
		<title>By: Analista</title>
		<link>http://www.sagadoprogramador.com.br/2009/07/nosso-modelo-de-objetos-nao-deve-ser-uma-copia-do-nosso-modelo-de-dados/comment-page-1/#comment-47</link>
		<dc:creator>Analista</dc:creator>
		<pubDate>Thu, 01 Oct 2009 18:41:20 +0000</pubDate>
		<guid isPermaLink="false">http://www.sagadoprogramador.com.br/?p=317#comment-47</guid>
		<description>Graças a Deus eu não programo mais!!!!!</description>
		<content:encoded><![CDATA[<p>Graças a Deus eu não programo mais!!!!!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Josemar Magalhães</title>
		<link>http://www.sagadoprogramador.com.br/2009/07/nosso-modelo-de-objetos-nao-deve-ser-uma-copia-do-nosso-modelo-de-dados/comment-page-1/#comment-46</link>
		<dc:creator>Josemar Magalhães</dc:creator>
		<pubDate>Wed, 16 Sep 2009 12:03:56 +0000</pubDate>
		<guid isPermaLink="false">http://www.sagadoprogramador.com.br/?p=317#comment-46</guid>
		<description>otimo post..</description>
		<content:encoded><![CDATA[<p>otimo post..</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Adriano</title>
		<link>http://www.sagadoprogramador.com.br/2009/07/nosso-modelo-de-objetos-nao-deve-ser-uma-copia-do-nosso-modelo-de-dados/comment-page-1/#comment-44</link>
		<dc:creator>Adriano</dc:creator>
		<pubDate>Thu, 20 Aug 2009 19:40:35 +0000</pubDate>
		<guid isPermaLink="false">http://www.sagadoprogramador.com.br/?p=317#comment-44</guid>
		<description>Valeu pela resposta.
Dei uma procurada por DataMapper e rails, e, pelo jeito, tem essa gem que implementa:

http://datamapper.org</description>
		<content:encoded><![CDATA[<p>Valeu pela resposta.<br />
Dei uma procurada por DataMapper e rails, e, pelo jeito, tem essa gem que implementa:</p>
<p><a href="http://datamapper.org" rel="nofollow">http://datamapper.org</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Luiz Costa</title>
		<link>http://www.sagadoprogramador.com.br/2009/07/nosso-modelo-de-objetos-nao-deve-ser-uma-copia-do-nosso-modelo-de-dados/comment-page-1/#comment-43</link>
		<dc:creator>Luiz Costa</dc:creator>
		<pubDate>Wed, 19 Aug 2009 22:02:03 +0000</pubDate>
		<guid isPermaLink="false">http://www.sagadoprogramador.com.br/?p=317#comment-43</guid>
		<description>@Adriano
Obrigado pelo comentário.

Quando utilizamos Active Record, significa que os nossos objetos são responsáveis por se persistir. Isso por si só já te induz a ter um modelo de objetos igual ao seu modelo de dados. No caso do exemplo do post, período é uma classe que faz sentido apenas no modelo de objetos, não é necessário refletir isso no BD. A utilização de Active Record não nos limita a não ter uma classe como esta. Talvez algumas implementações de AR podem tornar isso um pouco mais complicado. Em uma implementação de AR sem nenhum framework, poderia ser feito algo assim, em c#:


public class Curso 
{
   public Periodo periodo {get; set;}
   ... outros atributos
   
   public bool Save()
   {
     persistencia.Save(this); // aqui faz-se o mapeamento  necessário
   }
}

Já no ActiveRecord do Rails, eu não tenho muita certeza, mas acho que dá pra utilizar os métodos de callback (Before_save) para mudar o estado do objeto antes de salvar.
Bem como disse antes, dá até pra fazer, mas acho que nestes casos vc precisa de algo que faça um mapeamento melhor para a base de dados. Talvez o ideal seja utilizar um DataMapper.</description>
		<content:encoded><![CDATA[<p>@Adriano<br />
Obrigado pelo comentário.</p>
<p>Quando utilizamos Active Record, significa que os nossos objetos são responsáveis por se persistir. Isso por si só já te induz a ter um modelo de objetos igual ao seu modelo de dados. No caso do exemplo do post, período é uma classe que faz sentido apenas no modelo de objetos, não é necessário refletir isso no BD. A utilização de Active Record não nos limita a não ter uma classe como esta. Talvez algumas implementações de AR podem tornar isso um pouco mais complicado. Em uma implementação de AR sem nenhum framework, poderia ser feito algo assim, em c#:</p>
<p>public class Curso<br />
{<br />
   public Periodo periodo {get; set;}<br />
   &#8230; outros atributos</p>
<p>   public bool Save()<br />
   {<br />
     persistencia.Save(this); // aqui faz-se o mapeamento  necessário<br />
   }<br />
}</p>
<p>Já no ActiveRecord do Rails, eu não tenho muita certeza, mas acho que dá pra utilizar os métodos de callback (Before_save) para mudar o estado do objeto antes de salvar.<br />
Bem como disse antes, dá até pra fazer, mas acho que nestes casos vc precisa de algo que faça um mapeamento melhor para a base de dados. Talvez o ideal seja utilizar um DataMapper.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Adriano</title>
		<link>http://www.sagadoprogramador.com.br/2009/07/nosso-modelo-de-objetos-nao-deve-ser-uma-copia-do-nosso-modelo-de-dados/comment-page-1/#comment-42</link>
		<dc:creator>Adriano</dc:creator>
		<pubDate>Wed, 19 Aug 2009 20:28:03 +0000</pubDate>
		<guid isPermaLink="false">http://www.sagadoprogramador.com.br/?p=317#comment-42</guid>
		<description>Belo post!
Tenho desenvolvido em .NET, utilizado bastante NHibernate, e me policiando para aplicar orientação a objetos de verdade.
Em rails, estou apenas iniciando.. não consigo visualizar uma maneira legal de fazer essa implementação com Active Record... Poderia ilustar?

Obrigado!</description>
		<content:encoded><![CDATA[<p>Belo post!<br />
Tenho desenvolvido em .NET, utilizado bastante NHibernate, e me policiando para aplicar orientação a objetos de verdade.<br />
Em rails, estou apenas iniciando.. não consigo visualizar uma maneira legal de fazer essa implementação com Active Record&#8230; Poderia ilustar?</p>
<p>Obrigado!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Anderson Ambrosio</title>
		<link>http://www.sagadoprogramador.com.br/2009/07/nosso-modelo-de-objetos-nao-deve-ser-uma-copia-do-nosso-modelo-de-dados/comment-page-1/#comment-39</link>
		<dc:creator>Anderson Ambrosio</dc:creator>
		<pubDate>Thu, 23 Jul 2009 11:52:46 +0000</pubDate>
		<guid isPermaLink="false">http://www.sagadoprogramador.com.br/?p=317#comment-39</guid>
		<description>Fala Luiz!
Muito bom o post. Essa questão de delegar responsabilidades para os objetos corretos sempre foi e sempre será uma questão em que temos que tomar muito cuidado. Concordo com o Serginho quando ele diz que isso ainda gera muita confusão.
Abs</description>
		<content:encoded><![CDATA[<p>Fala Luiz!<br />
Muito bom o post. Essa questão de delegar responsabilidades para os objetos corretos sempre foi e sempre será uma questão em que temos que tomar muito cuidado. Concordo com o Serginho quando ele diz que isso ainda gera muita confusão.<br />
Abs</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jean</title>
		<link>http://www.sagadoprogramador.com.br/2009/07/nosso-modelo-de-objetos-nao-deve-ser-uma-copia-do-nosso-modelo-de-dados/comment-page-1/#comment-38</link>
		<dc:creator>Jean</dc:creator>
		<pubDate>Wed, 22 Jul 2009 00:03:19 +0000</pubDate>
		<guid isPermaLink="false">http://www.sagadoprogramador.com.br/?p=317#comment-38</guid>
		<description>Legal o post.</description>
		<content:encoded><![CDATA[<p>Legal o post.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Sergio Azevedo</title>
		<link>http://www.sagadoprogramador.com.br/2009/07/nosso-modelo-de-objetos-nao-deve-ser-uma-copia-do-nosso-modelo-de-dados/comment-page-1/#comment-37</link>
		<dc:creator>Sergio Azevedo</dc:creator>
		<pubDate>Tue, 21 Jul 2009 11:21:40 +0000</pubDate>
		<guid isPermaLink="false">http://www.sagadoprogramador.com.br/?p=317#comment-37</guid>
		<description>Ótimo post Luiz. Também já passei por uma situação destas em uma empresa que trabalhei. Eu cuidei de uma rede social parecida com um orkut durante um tempo. Cada um usuario tinha um perfil, e podia ter varios relacionamentos de amizade com outros perfis, ou seja, existia um relacionamento muitos-para-muitos nesta tabela. Por isso no existia no BD uma tabela de Amizade. A tabela Amizade guardava os Id´s dos amigos &quot;origem&quot; e &quot;destino&quot; da amizade. Ateh aki tudo bem, o problema foi quando eu olhei o codigo da classe perfil. Nesta hora eu descobri que perfis possuiam uma lista de objetos Amizades e nao uma lista de amigos, ou seja, quem criou a aplicacao trouxe todo o modelo relacional para o mundo OO. E com isso introduziu no modelo um objeto sem sentido chamado Amizade. Na primeira oportunidade que tive refatorei todo este codigo, Tornei Amizade um Embendable, e fiz a classe perfil ter uma lista de &quot;Perfis Amigos&quot;.
  Realmente existe ainda muita confusao quanto a esta questao.

Abracos</description>
		<content:encoded><![CDATA[<p>Ótimo post Luiz. Também já passei por uma situação destas em uma empresa que trabalhei. Eu cuidei de uma rede social parecida com um orkut durante um tempo. Cada um usuario tinha um perfil, e podia ter varios relacionamentos de amizade com outros perfis, ou seja, existia um relacionamento muitos-para-muitos nesta tabela. Por isso no existia no BD uma tabela de Amizade. A tabela Amizade guardava os Id´s dos amigos &#8220;origem&#8221; e &#8220;destino&#8221; da amizade. Ateh aki tudo bem, o problema foi quando eu olhei o codigo da classe perfil. Nesta hora eu descobri que perfis possuiam uma lista de objetos Amizades e nao uma lista de amigos, ou seja, quem criou a aplicacao trouxe todo o modelo relacional para o mundo OO. E com isso introduziu no modelo um objeto sem sentido chamado Amizade. Na primeira oportunidade que tive refatorei todo este codigo, Tornei Amizade um Embendable, e fiz a classe perfil ter uma lista de &#8220;Perfis Amigos&#8221;.<br />
  Realmente existe ainda muita confusao quanto a esta questao.</p>
<p>Abracos</p>
]]></content:encoded>
	</item>
</channel>
</rss>

