<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Espacio de Dario Quintana &#187; db4o</title>
	<atom:link href="http://darionet.wordpress.com/category/db4o/feed/" rel="self" type="application/rss+xml" />
	<link>http://darionet.wordpress.com</link>
	<description>responsabilidad del objeto: bloguear</description>
	<lastBuildDate>Wed, 12 Dec 2007 02:17:27 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='darionet.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/a8ecee8917ff0da44c44b1bcafbb573d?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Espacio de Dario Quintana &#187; db4o</title>
		<link>http://darionet.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://darionet.wordpress.com/osd.xml" title="Espacio de Dario Quintana" />
		<item>
		<title>db4o: firsts steps</title>
		<link>http://darionet.wordpress.com/2006/08/21/db4o-firsts-steps/</link>
		<comments>http://darionet.wordpress.com/2006/08/21/db4o-firsts-steps/#comments</comments>
		<pubDate>Mon, 21 Aug 2006 00:18:00 +0000</pubDate>
		<dc:creator>Dario Quintana</dc:creator>
				<category><![CDATA[db4o]]></category>

		<guid isPermaLink="false">http://darionet.wordpress.com/2006/08/21/db4o-firsts-steps/</guid>
		<description><![CDATA[En estos días estuve teniendo mis primeros encontronazos de verdad con db4o, antes habian sido solo pruebas, estoy inscripto al foro hispano oficial, y estuve -para inaugurar- haciendo unas preguntas, que la verdad me sacaron un poco del pozo en el que estaba. Tambien conocí a gente como Alan Lavintman, que me estuvo dando una [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=darionet.wordpress.com&blog=380996&post=16&subd=darionet&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>En estos días estuve teniendo mis primeros encontronazos de verdad con db4o, antes habian sido solo pruebas, estoy inscripto al foro hispano oficial, y estuve -para inaugurar- haciendo unas preguntas, que la verdad me sacaron un poco del pozo en el que estaba. Tambien conocí a gente como Alan Lavintman, que me estuvo dando una mano por chat con esta base. Obviamente, yo no podía pasar sin hacer la pregunta que el 90 % de los nuevos que comienzan a usar db4o, viniendo de usar un motor de datos relacional: &#8220;como manejo en la inserción la duplicidad de objetos?&#8221; ay!&#8230;esa pregunta es la del millon!</p>
<p>Este concepto es distinto, no es el mismo que el de un motor relacional, donde se puede manejar una entidad referencial por medio de claves. Por que en una dbms la inserción de los datos en una tabla intermedia -por ejemplo-, se podría implementar por medio de un INSERT INTO y listo, a lo sumo el motor se encargará de lanzar una excepción en el caso de que se viole una regla de integridad, pero no pasa de ahí. Con db4o es muuuuy distinto, creanme, y tiene sus &#8220;porques&#8221; bien justificados, y no porque db4o lo justifique, es que hablando de objetos&#8230;no podría ser de otra forma.</p>
<p>Vean esto, tengo dos clases, <strong>A</strong> y <strong>B</strong>, despues tengo una clase <strong>C</strong> (que vendría a ser si se quiere, como una &#8220;tabla intermedia&#8221;), en este caso seria un objeto que tiene relación con los otros dos objetos (A y B), en UML sería visto como una <em>asociación como clase</em>. Ahora, seamos un poco creativos, e imaginemos que tenemos que no tenemos la necesidad de guardar los objetos, por que nuestra memoria es no-volatil y no tengo problemas de capacidad de memoria (ni de velocidad si se quiere), de modo que tengo todos los objetos en memoria, y en vez de insertar, tengo que asociarlos nada más. Entonces tendré que tener en la mano el objeto del tipo C (es el nuevo objeto) y tambien los objetos del tipo A y B para asociarlos. De modo que podriamos ver que la clase de C tendría una propiedad de tipo A y otra propiedad de tipo B (minimamente), tambien podría tener otros atributos, por ejemplo Descripcion.</p>
<p align="left">La clase C podría declararse así:</p>
<pre>
<p align="left"><strong>public</strong> <strong>class</strong> C
{
<strong>private</strong> A _A;
<strong>private</strong> B _B;
<strong>private</strong> <strong>string</strong> _Descripcion;

<strong>public</strong> A A
{
<strong>get</strong> {   <strong>return</strong> _A; }
<strong>set</strong> { _A = <strong>value</strong>; }
}

<strong>public</strong> B B
{
<strong>get</strong> { <strong>return</strong> _B; }
<strong>set</strong> { _B = <strong>value</strong>; }
}

<strong>public</strong> <strong>string</strong> Descripcion
{
<strong>get</strong> { <strong>return</strong> _Descripcion; }
<strong>set</strong> { _Descripcion = <strong>value</strong>; }
}
}</pre>
<p align="left">Ahora tendriamos que setear las propiedades de C:</p>
<pre>
<p align="left">[...]
<p align="left">C ObjC = new C();
<p align="left">ObjC.A = objA;
<p align="left">ObjC.B = objB;
<p align="left">ObjC.Descripcion = "Esto es una descripcion";
<p align="left">[...]
</pre>
<p align="left">&#8230;y así estariamos realizando la asociacion de dichos objetos.</p>
<p align="left">Ahora olvidando el concepto de <em>object prevalence</em> (que hablando rapido es: tener todos los objetos en memoria -bien básico-) y volviendo a la realidad&#8230; volviendo a nuestra db4o, para tener que hacer una inserción de un objeto que tiene una asociacion con otros objetos, tenemos que:</p>
<p align="left">1) Cargar primeramente los otros objetos.</p>
<p align="left">2) Asociar los objetos, -seteando los campos del objeto a insertar-.</p>
<p align="left">3) Guardar el nuevo objeto en la base.</p>
<p align="left">4) Listo, objeto y las referencias ya se han realizado.</p>
<p align="left">Otra cosa que me pareció interesante destacar, que a db4o le importa muy poco como sobreescribamos los metodos <strong>Equals</strong>, no realiza comparaciones con él.</p>
<p align="left">Tambien puede ser de ayuda, el concepto de <strong>callbacks</strong>, que db4o implementa. Son funciones que se disparan cuando ocurren ciertos eventos.</p>
<p align="left">Por ejemplo, está el callback <strong>ObjectCanNew</strong> que devuelve un <em>bool</em>, y se dispara cada vez que se está por insertar un nuevo objeto, si el resultado de la función devuelve <em>true</em>, se guarda el objeto, de lo contrario no. En esa función tendríamos que agregar el procedimiento de validación.</p>
<p align="left">Pero este concepto intrusivo de db4object, particularmente no me gusta mucho, por que tenemos que decorar todas nuestras entidades de negocio con estos metodos.. que son parte del acceso a datos, y poco tiene que hacer en cuanto a una validación de negocios. Pero&#8230;es una opción.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/darionet.wordpress.com/16/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/darionet.wordpress.com/16/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/darionet.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/darionet.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/darionet.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/darionet.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/darionet.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/darionet.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/darionet.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/darionet.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/darionet.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/darionet.wordpress.com/16/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=darionet.wordpress.com&blog=380996&post=16&subd=darionet&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://darionet.wordpress.com/2006/08/21/db4o-firsts-steps/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b3b9f65a3f7efdbf95cd2d38f3f77499?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Dario Quintana</media:title>
		</media:content>
	</item>
		<item>
		<title>Una solución orientada a objetos</title>
		<link>http://darionet.wordpress.com/2005/11/21/una-solucion-orientada-a-objetos/</link>
		<comments>http://darionet.wordpress.com/2005/11/21/una-solucion-orientada-a-objetos/#comments</comments>
		<pubDate>Mon, 21 Nov 2005 15:57:00 +0000</pubDate>
		<dc:creator>Dario Quintana</dc:creator>
				<category><![CDATA[db4o]]></category>

		<guid isPermaLink="false">http://darionet.wordpress.com/2005/11/21/una-solucion-orientada-a-objetos/</guid>
		<description><![CDATA[Carl Rosenberg, fue el creador de esta Base de Datos Embebida Orientada a Objetos. DB4O es una solución en lo aquellos casos donde no necesitamos un Super Motor de Base de Datos con toda la sobrecarga que ello implica.
Lo bueno de este motor, es que facilita la persistencia de los objetos, o entidades de negocios, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=darionet.wordpress.com&blog=380996&post=8&subd=darionet&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a href="http://www.db4o.com/"><img src="http://www.db4o.com/img/h_logo.gif" border="0" /></a><em>Carl Rosenberg,</em> fue el creador de esta Base de Datos Embebida Orientada a Objetos. DB4O es una solución en lo aquellos casos donde no necesitamos un Super Motor de Base de Datos con toda la sobrecarga que ello implica.</p>
<p>Lo bueno de este motor, es que facilita la persistencia de los objetos, o entidades de negocios, haciendolo de una manera mas nativa, o mejor dicho, lo mas nativa posible, ahorrandonos tiempo y complicaciones en la Capa de Acceso a Datos. O sea que si no queremos enfrentarnos con un NHibernate, Ojb.Net, o un Gentle.Net, esta prodría llegar a ser una buena opción.</p>
<p>Otra cosa que tiene de bueno, es que ya sea para Java o .Net, funciona añadiendo al proyecto un Jar o una Dll respectivamente al proyecto y eso es todo lo que necesitamos  <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />   Ademas, la Base de Datos que utilices es un solo archivo &#8220;.yap&#8221;</p>
<p>Tambien podemos descargar de la Pagina Oficial el Object Manager, que esta desarrollado en Java y nos permite administrar los objetos de Nuestra Base de Datos.</p>
<p>DB4O se puede utilizar con <span style="font-weight:bold;">.Net</span>, <span style="font-weight:bold;">Mono</span> y <span style="font-weight:bold;">Java</span> <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />   y esta por la version 5.0 &#8211; <a href="http://www.db4o.com/community/ontheroad/downloadcenter/Default.aspx">Download Center</a> -</p>
<p style="text-align:center;"><a href="http://www.db4o.com/img/Screenshot_db4o_ObjectManager.gif"><img src="http://www.db4o.com/img/Screenshot_db4o_ObjectManager.gif" border="0" /></a></p>
<p>Tenés dos formas de hacer consultas, con QBE (Query-by-Example) y con S.O.D.A segun dicen, esta última parecer ser más flexible.</p>
<p>En este ejemplo se utiliza QBE:</p>
<p><span style="font-family:courier new;">   </span><span style="color:#3333ff;font-family:courier new;">public static void</span><span style="font-family:courier new;"> Main(</span><span style="color:#3333ff;font-family:courier new;">string</span><span style="font-family:courier new;">[] args)<br />
</span><span style="font-family:courier new;">{<br />
</span><span style="color:#339999;font-family:courier new;">        ObjectContainer </span><span style="font-family:courier new;">objectContainer = </span><span style="color:#339999;font-family:courier new;">Db4o</span><span style="font-family:courier new;">.OpenFile(DATABASE_FILE);</span><br />
<span style="font-family:courier new;">        objectContainer.Set</span><span style="color:#3333ff;font-family:courier new;">(new </span><span style="color:#339999;font-family:courier new;">Pilot</span><span style="font-family:courier new;">(</span><span style="color:#cc0000;font-family:courier new;">&#8220;Michael Schumacher&#8221;</span><span style="font-family:courier new;">, 101));</span><br />
<span style="font-family:courier new;">        objectContainer.Set(</span><span style="color:#3333ff;font-family:courier new;">new </span><span style="color:#339999;font-family:courier new;">Pilot</span><span style="font-family:courier new;">(</span><span style="color:#cc0000;font-family:courier new;">&#8220;Rubens Barrichello&#8221;</span><span style="font-family:courier new;">, 99));</span><br />
<span style="font-family:courier new;">        objectContainer.Commit();</span><span style="font-family:verdana;">  </span><br />
<span style="font-family:courier new;">             </span><span style="color:#339999;font-family:courier new;">        ObjectSet </span><span style="font-family:courier new;">objectSet = objectContainer.Get(</span><span style="color:#3333ff;font-family:courier new;">new </span><span style="color:#339999;font-family:courier new;">Pilot<span style="color:#000000;">(</span><span style="color:#3333ff;">null</span>, </span><span style="font-family:courier new;">101));</span></p>
<p><span style="font-family:courier new;">            </span><span style="color:#3333ff;font-family:courier new;">        while </span><span style="font-family:courier new;">(objectSet.HasNext())</span><br />
<span style="font-family:courier new;">        {</span><br />
<span style="font-family:courier new;">                    </span><span style="color:#339999;font-family:courier new;">            Console</span><span style="font-family:courier new;">.WriteLine(objectSet.Next());</span><br />
<span style="font-family:courier new;">            }</span><br />
<span style="font-family:courier new;">               </span><span style="color:#339999;font-family:courier new;">            Console</span><span style="font-family:courier new;">.ReadLine();</span><br />
<span style="font-family:courier new;">        </span><br />
<span style="font-family:courier new;">            objectContainer.Close();</span><br />
<span style="font-family:courier new;">}</span></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/darionet.wordpress.com/8/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/darionet.wordpress.com/8/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/darionet.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/darionet.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/darionet.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/darionet.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/darionet.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/darionet.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/darionet.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/darionet.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/darionet.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/darionet.wordpress.com/8/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=darionet.wordpress.com&blog=380996&post=8&subd=darionet&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://darionet.wordpress.com/2005/11/21/una-solucion-orientada-a-objetos/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b3b9f65a3f7efdbf95cd2d38f3f77499?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Dario Quintana</media:title>
		</media:content>

		<media:content url="http://www.db4o.com/img/h_logo.gif" medium="image" />

		<media:content url="http://www.db4o.com/img/Screenshot_db4o_ObjectManager.gif" medium="image" />
	</item>
	</channel>
</rss>