<?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>Cisneros, Jonathan</title>
	<atom:link href="http://cisneros.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://cisneros.wordpress.com</link>
	<description>Desarrollo de Software</description>
	<lastBuildDate>Sun, 07 Oct 2007 22:29:53 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='cisneros.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Cisneros, Jonathan</title>
		<link>http://cisneros.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://cisneros.wordpress.com/osd.xml" title="Cisneros, Jonathan" />
	<atom:link rel='hub' href='http://cisneros.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Creando una capa de acceso a datos</title>
		<link>http://cisneros.wordpress.com/2007/09/24/creando-una-capa-de-acceso-a-datos/</link>
		<comments>http://cisneros.wordpress.com/2007/09/24/creando-una-capa-de-acceso-a-datos/#comments</comments>
		<pubDate>Mon, 24 Sep 2007 03:17:51 +0000</pubDate>
		<dc:creator>cisneros</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[dal]]></category>
		<category><![CDATA[doodads]]></category>
		<category><![CDATA[nhibernate]]></category>
		<category><![CDATA[subsonic]]></category>

		<guid isPermaLink="false">http://cisneros.wordpress.com/2007/09/24/creando-una-capa-de-acceso-a-datos/</guid>
		<description><![CDATA[En mi primer artículo de mi blog quiero hacerles un resumen sobre algunas herramientas que nos ayudarán a la hora de crear una capa de acceso a datos para nuestras aplicaciones en .Net. Existen distintas formas de encarar la creación de una capa de acceso a datos, una forma es crear una clase por cada [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cisneros.wordpress.com&amp;blog=1739328&amp;post=3&amp;subd=cisneros&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>En mi primer artículo de mi blog quiero hacerles un resumen sobre algunas herramientas que nos ayudarán a la hora de crear una capa de acceso a datos para nuestras aplicaciones en .Net.</p>
<p>Existen distintas formas de encarar la creación de una capa de acceso a datos, una forma es crear una clase por cada tabla en la base de datos y mapearlas una a una. Esta es la forma más sencilla y es muy válida cuando tenemos una estructura de base de datos que sea muy parecida a nuestro modelo de dominio (que no se haya optimizado con particiones horizontales o uniones).</p>
<p>Otra forma es respetar un modelo orientado a objetos que represente los objetos del dominio del negocio. Esta es una forma más correcta de trabajar pero se hace más complejo mapear esas clases a sus tablas correspondientes.</p>
<p>Para realizar esta tarea existen herramientas que se llaman ORM (Object to Relational Mapper).</p>
<p>Un ORM muy popular es el <a href="http://www.nhibernate.org" title="NHibernate" target="_blank">NHibernate</a>, se trata de una portación al .net del Hibernate de Java. Este framework se encarga de persistir nuestros objetos del negocio, también  tiene un lenguaje de consultas orientado a objetos propio y es totalmente independiente de la base de datos que usemos. Y lo bueno que tiene esto es que podemos migrar de una base de datos a otra sin tocar nuestro código (simplemente cambiamos un par de cositas en un archivo de configuración). Eso sí, hay un trabajito extra, tenemos que crear archivos de configuración xml que le van a indicar a NHibernate cómo tiene que mapear cada clase a sus respectivas tablas.</p>
<p>NHibernate es el framework de persistencia más completo que existe en el mercado. Soporta todos los tipos de relaciones (uno a uno, uno a muchos, muchos a muchos) y puede mapear varias tablas a una clase o al revés, también permite usar herencia, transacciones, agregaciones y muchas cosas más, prácticamente podemos hacer cualquier cosa que se nos ocurra. Si buscan una herramienta que les permita crecer y hacer modificaciones sin que surjan limitaciones que no se tuvieron en cuenta, la mejor opción es NHibernate.</p>
<p>Si los archivos de configuración de NH les parecen muy complicados, existen muchas herramientas para facilitarnos las cosas. Una que yo he probado y que me fue muy satisfactoria fue <a href="http://www.mygenerationsoftware.com/" title="MyGeneration" target="_blank">MyGeneration</a>, este es un generador de código opensource que dispone de varias plantillas para generar las clases de acceso a datos y los archivos de configuración de NHibernate a partir de la estructura de nuestra base de datos.</p>
<p>Existe otro proyecto muy interesante: <a href="http://www.castleproject.org/">CastleProject</a> (de Brasil) que se trata de un conjunto de frameworks para implementar patrones de diseño com MVC, Inversion Of Control y ActiveRecord. El framework ActiveRecord de CastleProject nos permite implementar este patrón de diseño para el acceso a datos empleando en un nivel inferior a NHibernate por lo que estaríamos usando NHibernate para la persistencia pero encapsulado en el patrón ActiveRecord y también nos olvidamos de los archivos de configuración XML ya que con este nuevo framework sólo tenemos que poner decoradores en nuestras clases (si los nombres de las propiedades se corresponden con las columnas ni siquiera es necesario usar decoradores). Con esta herramienta se simplifica mucho usar NHibernate para la persistencia.</p>
<p>Si volvemos al generador de código que nombre antes (MyGeneration), el mismo creador nos brinda su propio framework de persistencia: dOOdads, para trabajar con este framawork necesitamos el MyGeneration para generar todas nuestras clases y los stored procedures para los inserts, updates y deletes. Esta herramienta genera código muy legible y con una forma muy fácil de realizar consultas.</p>
<p>Ahora, si ya conocieron a Ruby on Rails y quedaron maravillados, esta herramienta les va a gustar, se llama <a href="http://www.subsonicproject.com/" target="_blank">SubSonic</a> y se basa en la filosofía de RoR. SubSonic tiene la capacidad de generar toda nuestra capa de acceso a datos en forma dinámica (vean los videos que se encuentran en la página oficial), y también tiene algunos controles como el Scaffold de RoR. Otra cosa muy interesante que tiene este framework es la facilidad con la que se puede implementar el patrón REST (no se si es un patrón pero es algo que me llamó la atención y que me gustó mucho).</p>
<p>Hasta acá son los frameworks que yo he usado y que me dieron mejores resultados. Espero que este artículo les haya ayudado a elegir el framework de persistencia para sus proyectos.</p>
<p>Saludos.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/cisneros.wordpress.com/3/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/cisneros.wordpress.com/3/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cisneros.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cisneros.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cisneros.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cisneros.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cisneros.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cisneros.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cisneros.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cisneros.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cisneros.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cisneros.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cisneros.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cisneros.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cisneros.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cisneros.wordpress.com/3/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cisneros.wordpress.com&amp;blog=1739328&amp;post=3&amp;subd=cisneros&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cisneros.wordpress.com/2007/09/24/creando-una-capa-de-acceso-a-datos/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/65474669291d60d61ba07875704ab528?s=96&#38;d=identicon" medium="image">
			<media:title type="html">cisneros</media:title>
		</media:content>
	</item>
	</channel>
</rss>
