<?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/"
	>

<channel>
	<title>moure.es - Alfonso Moure Ortega &#187; .net</title>
	<atom:link href="http://www.moure.es/tag/net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.moure.es</link>
	<description>innovation is the rule, not the exception</description>
	<lastBuildDate>Thu, 11 Aug 2011 10:07:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Palabras reservadas en un enum de C#</title>
		<link>http://www.moure.es/2008/10/palabras-reservadas-en-un-enum-de-c/</link>
		<comments>http://www.moure.es/2008/10/palabras-reservadas-en-un-enum-de-c/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 18:07:20 +0000</pubDate>
		<dc:creator>moure</dc:creator>
				<category><![CDATA[asp.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[enum]]></category>

		<guid isPermaLink="false">http://www.moure.es/?p=80</guid>
		<description><![CDATA[A veces queremos utilizar palabras reservadas dentro de un listado de valores de un enumerado (enum) dentro de nuestro código C#. Hoy un compañero me ha preguntado cómo hacerlo, y tras repasar mis chuletas mentales, almacenadas en memoria secundaria en lo más profundo de mis sesos, recordé la forma: poniendo el modificador @ delante del [...]]]></description>
			<content:encoded><![CDATA[<p>A veces queremos utilizar palabras reservadas dentro de un listado de valores de un enumerado (<em>enum</em>) dentro de nuestro código C#. Hoy un compañero me ha preguntado cómo hacerlo, y tras repasar mis chuletas mentales, almacenadas en memoria secundaria en lo más profundo de mis sesos, recordé la forma: poniendo el modificador <em>@</em> delante del valor igual a la palabra reservada. Por ejemplo:</p>
<blockquote><p>enum Languages {es, <font color="#ff0000">@as</font>, <font color="#ff0000">@in</font>, en, zh};</p></blockquote>
<p>Ya no hay excusas: no habrá que usar strings &#8220;a pelo&#8221; en nuestras serializaciones de datos (XmlSerialization).</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Bookmark</em></strong></a>
<br />
<div class="d">
<br />
<a href="http://buzz.yahoo.com/submit?submitUrl=http%3A%2F%2Fwww.moure.es%2F2008%2F10%2Fpalabras-reservadas-en-un-enum-de-c%2F&amp;submitHeadline=Palabras+reservadas+en+un+enum+de+C%23&amp;submitSummary=" rel="nofollow" title="Añadir a&nbsp;Buzz"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/buzz.png" title="Añadir a&nbsp;Buzz" alt="Añadir a&nbsp;Buzz" /></a>
<a href="http://del.icio.us/post?url=http%3A%2F%2Fwww.moure.es%2F2008%2F10%2Fpalabras-reservadas-en-un-enum-de-c%2F&amp;title=Palabras+reservadas+en+un+enum+de+C%23" rel="nofollow" title="Añadir a&nbsp;Del.icio.us"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/delicious.png" title="Añadir a&nbsp;Del.icio.us" alt="Añadir a&nbsp;Del.icio.us" /></a>
<a href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.moure.es%2F2008%2F10%2Fpalabras-reservadas-en-un-enum-de-c%2F&amp;title=Palabras+reservadas+en+un+enum+de+C%23" rel="nofollow" title="Añadir a&nbsp;digg"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/digg.png" title="Añadir a&nbsp;digg" alt="Añadir a&nbsp;digg" /></a>
<a href="http://www.dotnetkicks.com/kick/?url=http%3A%2F%2Fwww.moure.es%2F2008%2F10%2Fpalabras-reservadas-en-un-enum-de-c%2F&amp;title=Palabras+reservadas+en+un+enum+de+C%23" rel="nofollow" title="Añadir a&nbsp;DotNetKicks"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/dotnetkicks.png" title="Añadir a&nbsp;DotNetKicks" alt="Añadir a&nbsp;DotNetKicks" /></a>
<a href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.moure.es%2F2008%2F10%2Fpalabras-reservadas-en-un-enum-de-c%2F" rel="nofollow" title="Añadir a&nbsp;Facebook"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/facebook.png" title="Añadir a&nbsp;Facebook" alt="Añadir a&nbsp;Facebook" /></a>
<a href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.moure.es%2F2008%2F10%2Fpalabras-reservadas-en-un-enum-de-c%2F&amp;title=Palabras+reservadas+en+un+enum+de+C%23" rel="nofollow" title="Añadir a&nbsp;Google Bookmarks"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/google.png" title="Añadir a&nbsp;Google Bookmarks" alt="Añadir a&nbsp;Google Bookmarks" /></a>
<a href="http://www.mister-wong.com/index.php?action=addurl&amp;bm_url=http%3A%2F%2Fwww.moure.es%2F2008%2F10%2Fpalabras-reservadas-en-un-enum-de-c%2F&amp;bm_description=Palabras+reservadas+en+un+enum+de+C%23" rel="nofollow" title="Añadir a&nbsp;Mister Wong"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/misterwong.png" title="Añadir a&nbsp;Mister Wong" alt="Añadir a&nbsp;Mister Wong" /></a>
<a href="http://reddit.com/submit?url=http%3A%2F%2Fwww.moure.es%2F2008%2F10%2Fpalabras-reservadas-en-un-enum-de-c%2F&amp;title=Palabras+reservadas+en+un+enum+de+C%23" rel="nofollow" title="Añadir a&nbsp;reddit"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/reddit.png" title="Añadir a&nbsp;reddit" alt="Añadir a&nbsp;reddit" /></a>
<a href="http://slashdot.org/bookmark.pl?url=http%3A%2F%2Fwww.moure.es%2F2008%2F10%2Fpalabras-reservadas-en-un-enum-de-c%2F&amp;title=Palabras+reservadas+en+un+enum+de+C%23" rel="nofollow" title="Añadir a&nbsp;Slashdot"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/slashdot.png" title="Añadir a&nbsp;Slashdot" alt="Añadir a&nbsp;Slashdot" /></a>
<a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.moure.es%2F2008%2F10%2Fpalabras-reservadas-en-un-enum-de-c%2F&amp;title=Palabras+reservadas+en+un+enum+de+C%23" rel="nofollow" title="Añadir a&nbsp;Stumble Upon"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Añadir a&nbsp;Stumble Upon" alt="Añadir a&nbsp;Stumble Upon" /></a>
<a href="http://www.technorati.com/faves?add=http%3A%2F%2Fwww.moure.es%2F2008%2F10%2Fpalabras-reservadas-en-un-enum-de-c%2F" rel="nofollow" title="Añadir a&nbsp;Technorati"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/technorati.png" title="Añadir a&nbsp;Technorati" alt="Añadir a&nbsp;Technorati" /></a>
<a href="http://tipd.com/submit.php?url=http%3A%2F%2Fwww.moure.es%2F2008%2F10%2Fpalabras-reservadas-en-un-enum-de-c%2F" rel="nofollow" title="Añadir a&nbsp;Tip'd"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/tipd.png" title="Añadir a&nbsp;Tip'd" alt="Añadir a&nbsp;Tip'd" /></a>
<a href="http://twitter.com/home/?status=Check+out+Palabras+reservadas+en+un+enum+de+C%23+@+http%3A%2F%2Fwww.moure.es%2F2008%2F10%2Fpalabras-reservadas-en-un-enum-de-c%2F" rel="nofollow" title="Añadir a&nbsp;Twitter"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/twitter.png" title="Añadir a&nbsp;Twitter" alt="Añadir a&nbsp;Twitter" /></a>
<a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Fwww.moure.es%2F2008%2F10%2Fpalabras-reservadas-en-un-enum-de-c%2F&amp;t=Palabras+reservadas+en+un+enum+de+C%23" rel="nofollow" title="Añadir a&nbsp;Yahoo My Web"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Añadir a&nbsp;Yahoo My Web" alt="Añadir a&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://www.moure.es/2008/10/palabras-reservadas-en-un-enum-de-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Convertir un String en enumerado con C#</title>
		<link>http://www.moure.es/2008/10/convertir-un-string-en-enumerado-con-c/</link>
		<comments>http://www.moure.es/2008/10/convertir-un-string-en-enumerado-con-c/#comments</comments>
		<pubDate>Fri, 24 Oct 2008 14:43:09 +0000</pubDate>
		<dc:creator>moure</dc:creator>
				<category><![CDATA[asp.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[informática]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[casting]]></category>
		<category><![CDATA[typeof]]></category>

		<guid isPermaLink="false">http://www.moure.es/?p=77</guid>
		<description><![CDATA[Adiós al tradicional método de convertir un string en enum utilizando un eterno switch en C#&#8230; Viejos tiempos en los que debíamos hacer algo similar a&#8230; switch(saludo) { case &#8220;hola&#8221;: return Saludos.Hola; case &#8220;hello&#8221;: return Saludos.Hello; } ¿Quién no ha hecho este tipo de aberración alguna vez durante su vida como desarrollador? Todos&#8230; Afortunadamente me [...]]]></description>
			<content:encoded><![CDATA[<p>Adiós al tradicional método de convertir un string en enum utilizando un eterno switch en C#&#8230; Viejos tiempos en los que debíamos hacer algo similar a&#8230;</p>
<blockquote><p>switch(saludo)<br />
{</p>
<blockquote><p>case &#8220;hola&#8221;: return Saludos.Hola;<br />
case &#8220;hello&#8221;: return Saludos.Hello;</p></blockquote>
<p>}</p></blockquote>
<p>¿Quién no ha hecho este tipo de aberración alguna vez durante su vida como desarrollador? Todos&#8230;</p>
<p>Afortunadamente me he topado con un sistema muy interesante, que prácticamente podemos definir como evidente (<em>¿Cómo no se me pudo ocurrir antes?</em>) para realizar la conversión sin tener que hacer uso de un switch del tamaño de 20 folios A4. Tan sencillo como ésto:</p>
<blockquote><p>public Enum Saludos {Hola,Hello,Hi};</p>
<p>public Saludos GetSaludo(string saludo)<br />
{</p>
<blockquote><p>return (Saludos)Enum.Parse(typeof(Saludos), saludo);</p></blockquote>
<p>}</p></blockquote>
<p>De éste modo realizaremos la conversión de manera sencilla y práctica, con una única línea de código.</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Bookmark</em></strong></a>
<br />
<div class="d">
<br />
<a href="http://buzz.yahoo.com/submit?submitUrl=http%3A%2F%2Fwww.moure.es%2F2008%2F10%2Fconvertir-un-string-en-enumerado-con-c%2F&amp;submitHeadline=Convertir+un+String+en+enumerado+con+C%23&amp;submitSummary=" rel="nofollow" title="Añadir a&nbsp;Buzz"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/buzz.png" title="Añadir a&nbsp;Buzz" alt="Añadir a&nbsp;Buzz" /></a>
<a href="http://del.icio.us/post?url=http%3A%2F%2Fwww.moure.es%2F2008%2F10%2Fconvertir-un-string-en-enumerado-con-c%2F&amp;title=Convertir+un+String+en+enumerado+con+C%23" rel="nofollow" title="Añadir a&nbsp;Del.icio.us"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/delicious.png" title="Añadir a&nbsp;Del.icio.us" alt="Añadir a&nbsp;Del.icio.us" /></a>
<a href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.moure.es%2F2008%2F10%2Fconvertir-un-string-en-enumerado-con-c%2F&amp;title=Convertir+un+String+en+enumerado+con+C%23" rel="nofollow" title="Añadir a&nbsp;digg"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/digg.png" title="Añadir a&nbsp;digg" alt="Añadir a&nbsp;digg" /></a>
<a href="http://www.dotnetkicks.com/kick/?url=http%3A%2F%2Fwww.moure.es%2F2008%2F10%2Fconvertir-un-string-en-enumerado-con-c%2F&amp;title=Convertir+un+String+en+enumerado+con+C%23" rel="nofollow" title="Añadir a&nbsp;DotNetKicks"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/dotnetkicks.png" title="Añadir a&nbsp;DotNetKicks" alt="Añadir a&nbsp;DotNetKicks" /></a>
<a href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.moure.es%2F2008%2F10%2Fconvertir-un-string-en-enumerado-con-c%2F" rel="nofollow" title="Añadir a&nbsp;Facebook"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/facebook.png" title="Añadir a&nbsp;Facebook" alt="Añadir a&nbsp;Facebook" /></a>
<a href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.moure.es%2F2008%2F10%2Fconvertir-un-string-en-enumerado-con-c%2F&amp;title=Convertir+un+String+en+enumerado+con+C%23" rel="nofollow" title="Añadir a&nbsp;Google Bookmarks"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/google.png" title="Añadir a&nbsp;Google Bookmarks" alt="Añadir a&nbsp;Google Bookmarks" /></a>
<a href="http://www.mister-wong.com/index.php?action=addurl&amp;bm_url=http%3A%2F%2Fwww.moure.es%2F2008%2F10%2Fconvertir-un-string-en-enumerado-con-c%2F&amp;bm_description=Convertir+un+String+en+enumerado+con+C%23" rel="nofollow" title="Añadir a&nbsp;Mister Wong"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/misterwong.png" title="Añadir a&nbsp;Mister Wong" alt="Añadir a&nbsp;Mister Wong" /></a>
<a href="http://reddit.com/submit?url=http%3A%2F%2Fwww.moure.es%2F2008%2F10%2Fconvertir-un-string-en-enumerado-con-c%2F&amp;title=Convertir+un+String+en+enumerado+con+C%23" rel="nofollow" title="Añadir a&nbsp;reddit"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/reddit.png" title="Añadir a&nbsp;reddit" alt="Añadir a&nbsp;reddit" /></a>
<a href="http://slashdot.org/bookmark.pl?url=http%3A%2F%2Fwww.moure.es%2F2008%2F10%2Fconvertir-un-string-en-enumerado-con-c%2F&amp;title=Convertir+un+String+en+enumerado+con+C%23" rel="nofollow" title="Añadir a&nbsp;Slashdot"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/slashdot.png" title="Añadir a&nbsp;Slashdot" alt="Añadir a&nbsp;Slashdot" /></a>
<a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.moure.es%2F2008%2F10%2Fconvertir-un-string-en-enumerado-con-c%2F&amp;title=Convertir+un+String+en+enumerado+con+C%23" rel="nofollow" title="Añadir a&nbsp;Stumble Upon"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Añadir a&nbsp;Stumble Upon" alt="Añadir a&nbsp;Stumble Upon" /></a>
<a href="http://www.technorati.com/faves?add=http%3A%2F%2Fwww.moure.es%2F2008%2F10%2Fconvertir-un-string-en-enumerado-con-c%2F" rel="nofollow" title="Añadir a&nbsp;Technorati"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/technorati.png" title="Añadir a&nbsp;Technorati" alt="Añadir a&nbsp;Technorati" /></a>
<a href="http://tipd.com/submit.php?url=http%3A%2F%2Fwww.moure.es%2F2008%2F10%2Fconvertir-un-string-en-enumerado-con-c%2F" rel="nofollow" title="Añadir a&nbsp;Tip'd"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/tipd.png" title="Añadir a&nbsp;Tip'd" alt="Añadir a&nbsp;Tip'd" /></a>
<a href="http://twitter.com/home/?status=Check+out+Convertir+un+String+en+enumerado+con+C%23+@+http%3A%2F%2Fwww.moure.es%2F2008%2F10%2Fconvertir-un-string-en-enumerado-con-c%2F" rel="nofollow" title="Añadir a&nbsp;Twitter"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/twitter.png" title="Añadir a&nbsp;Twitter" alt="Añadir a&nbsp;Twitter" /></a>
<a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Fwww.moure.es%2F2008%2F10%2Fconvertir-un-string-en-enumerado-con-c%2F&amp;t=Convertir+un+String+en+enumerado+con+C%23" rel="nofollow" title="Añadir a&nbsp;Yahoo My Web"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Añadir a&nbsp;Yahoo My Web" alt="Añadir a&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://www.moure.es/2008/10/convertir-un-string-en-enumerado-con-c/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Desarrollo, desarrollos, y des-desarrollos</title>
		<link>http://www.moure.es/2008/06/desarrollo-desarrollos-y-des-desarrollos/</link>
		<comments>http://www.moure.es/2008/06/desarrollo-desarrollos-y-des-desarrollos/#comments</comments>
		<pubDate>Fri, 27 Jun 2008 18:08:05 +0000</pubDate>
		<dc:creator>moure</dc:creator>
				<category><![CDATA[asp.net]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[emprendedor]]></category>
		<category><![CDATA[informática]]></category>
		<category><![CDATA[moure.es]]></category>
		<category><![CDATA[opinión]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[empresa]]></category>

		<guid isPermaLink="false">http://www.moure.es/?p=54</guid>
		<description><![CDATA[Existen muchos paradigmas diferentes que pueden ser aplicados a la hora de diseñar la arquitectura de un producto software, al igual que muchas maneras de afrontarlo y subsanar sus problemas. Igualmente, hay multiples modos de enfocar las diferentes fases del desarrollo. Personalmente tiendo a clasificar a las empresas de desarrollo en determinados grupos: Desarrollo heróico [...]]]></description>
			<content:encoded><![CDATA[<p>Existen muchos paradigmas diferentes que pueden ser aplicados a la hora de diseñar la arquitectura de un producto software, al igual que muchas maneras de afrontarlo y subsanar sus problemas. Igualmente, hay multiples modos de enfocar las diferentes fases del desarrollo.</p>
<p>Personalmente tiendo a clasificar a las empresas de desarrollo en determinados grupos:</p>
<ol>
<li>Desarrollo heróico :: aunque el término ya existe, usado para denominar a aquel grupo de desarrollo que intenta solucionar los problemas informáticos de manera individual y sin un planteamiento previo claro, donde el hecho de alcanzar el éxito estará marcado por la calidad de sus programadores a nivel individual y no colectivo. Este tipo de equipos suelen, por estadistica, tener una vida relativamente corta y bien sufrida, muy posiblemente por despreciar la calidad del equipo como un conjunto capaz de colaborar y trabajar como un ente único.</li>
<li>Desarrollo organizado sin calidad :: empresas donde existe una buena organización y cohesión interna pero un nivel tecnológico o formativo demasiado bajo como para sacarle un buen rendimiento. En este tipo de mercados quedarse atrás es peor que letal.</li>
<li>Desarrollo organizado de calidad :: empresas que lo tienen todo, desde buena organización hasta profesionales capaces de explotarla y sacarla partido.</li>
</ol>
<p>Esto desde luego es únicamente referente a su capacidad de organizarse y aprovechar sus recursos humanos. Pero, ¿qué hay de las empresas que no aprovechan en absoluto sus virtudes técnicas? ¿Qué sucede con las empresas que alardean de utilizar .NET Framework pero no aprovechan ninguna de sus capacidades únicas?</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Bookmark</em></strong></a>
<br />
<div class="d">
<br />
<a href="http://buzz.yahoo.com/submit?submitUrl=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fdesarrollo-desarrollos-y-des-desarrollos%2F&amp;submitHeadline=Desarrollo%2C+desarrollos%2C+y+des-desarrollos&amp;submitSummary=" rel="nofollow" title="Añadir a&nbsp;Buzz"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/buzz.png" title="Añadir a&nbsp;Buzz" alt="Añadir a&nbsp;Buzz" /></a>
<a href="http://del.icio.us/post?url=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fdesarrollo-desarrollos-y-des-desarrollos%2F&amp;title=Desarrollo%2C+desarrollos%2C+y+des-desarrollos" rel="nofollow" title="Añadir a&nbsp;Del.icio.us"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/delicious.png" title="Añadir a&nbsp;Del.icio.us" alt="Añadir a&nbsp;Del.icio.us" /></a>
<a href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fdesarrollo-desarrollos-y-des-desarrollos%2F&amp;title=Desarrollo%2C+desarrollos%2C+y+des-desarrollos" rel="nofollow" title="Añadir a&nbsp;digg"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/digg.png" title="Añadir a&nbsp;digg" alt="Añadir a&nbsp;digg" /></a>
<a href="http://www.dotnetkicks.com/kick/?url=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fdesarrollo-desarrollos-y-des-desarrollos%2F&amp;title=Desarrollo%2C+desarrollos%2C+y+des-desarrollos" rel="nofollow" title="Añadir a&nbsp;DotNetKicks"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/dotnetkicks.png" title="Añadir a&nbsp;DotNetKicks" alt="Añadir a&nbsp;DotNetKicks" /></a>
<a href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fdesarrollo-desarrollos-y-des-desarrollos%2F" rel="nofollow" title="Añadir a&nbsp;Facebook"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/facebook.png" title="Añadir a&nbsp;Facebook" alt="Añadir a&nbsp;Facebook" /></a>
<a href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fdesarrollo-desarrollos-y-des-desarrollos%2F&amp;title=Desarrollo%2C+desarrollos%2C+y+des-desarrollos" rel="nofollow" title="Añadir a&nbsp;Google Bookmarks"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/google.png" title="Añadir a&nbsp;Google Bookmarks" alt="Añadir a&nbsp;Google Bookmarks" /></a>
<a href="http://www.mister-wong.com/index.php?action=addurl&amp;bm_url=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fdesarrollo-desarrollos-y-des-desarrollos%2F&amp;bm_description=Desarrollo%2C+desarrollos%2C+y+des-desarrollos" rel="nofollow" title="Añadir a&nbsp;Mister Wong"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/misterwong.png" title="Añadir a&nbsp;Mister Wong" alt="Añadir a&nbsp;Mister Wong" /></a>
<a href="http://reddit.com/submit?url=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fdesarrollo-desarrollos-y-des-desarrollos%2F&amp;title=Desarrollo%2C+desarrollos%2C+y+des-desarrollos" rel="nofollow" title="Añadir a&nbsp;reddit"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/reddit.png" title="Añadir a&nbsp;reddit" alt="Añadir a&nbsp;reddit" /></a>
<a href="http://slashdot.org/bookmark.pl?url=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fdesarrollo-desarrollos-y-des-desarrollos%2F&amp;title=Desarrollo%2C+desarrollos%2C+y+des-desarrollos" rel="nofollow" title="Añadir a&nbsp;Slashdot"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/slashdot.png" title="Añadir a&nbsp;Slashdot" alt="Añadir a&nbsp;Slashdot" /></a>
<a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fdesarrollo-desarrollos-y-des-desarrollos%2F&amp;title=Desarrollo%2C+desarrollos%2C+y+des-desarrollos" rel="nofollow" title="Añadir a&nbsp;Stumble Upon"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Añadir a&nbsp;Stumble Upon" alt="Añadir a&nbsp;Stumble Upon" /></a>
<a href="http://www.technorati.com/faves?add=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fdesarrollo-desarrollos-y-des-desarrollos%2F" rel="nofollow" title="Añadir a&nbsp;Technorati"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/technorati.png" title="Añadir a&nbsp;Technorati" alt="Añadir a&nbsp;Technorati" /></a>
<a href="http://tipd.com/submit.php?url=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fdesarrollo-desarrollos-y-des-desarrollos%2F" rel="nofollow" title="Añadir a&nbsp;Tip'd"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/tipd.png" title="Añadir a&nbsp;Tip'd" alt="Añadir a&nbsp;Tip'd" /></a>
<a href="http://twitter.com/home/?status=Check+out+Desarrollo%2C+desarrollos%2C+y+des-desarrollos+@+http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fdesarrollo-desarrollos-y-des-desarrollos%2F" rel="nofollow" title="Añadir a&nbsp;Twitter"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/twitter.png" title="Añadir a&nbsp;Twitter" alt="Añadir a&nbsp;Twitter" /></a>
<a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fdesarrollo-desarrollos-y-des-desarrollos%2F&amp;t=Desarrollo%2C+desarrollos%2C+y+des-desarrollos" rel="nofollow" title="Añadir a&nbsp;Yahoo My Web"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Añadir a&nbsp;Yahoo My Web" alt="Añadir a&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://www.moure.es/2008/06/desarrollo-desarrollos-y-des-desarrollos/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Métodos anónimos</title>
		<link>http://www.moure.es/2008/06/metodos-anonimos/</link>
		<comments>http://www.moure.es/2008/06/metodos-anonimos/#comments</comments>
		<pubDate>Sun, 22 Jun 2008 21:59:27 +0000</pubDate>
		<dc:creator>moure</dc:creator>
				<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[informática]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[c#]]></category>

		<guid isPermaLink="false">http://www.moure.es/?p=52</guid>
		<description><![CDATA[O más conocidos como Annonymous Methods. Los programadores de la vieja escuela siempre habráno notado la ausencia de esta opción, añadida en la versión 2.0 de C# y no demasiado conocida por los desarrolladores que aun no han cambiado totalmente el chip desde la versión 1.1 de .NET Framework (desgraciadamente, demasiados hoy en día). ¿Qué [...]]]></description>
			<content:encoded><![CDATA[<p>O más conocidos como <em>Annonymous Methods</em>. Los programadores de la vieja escuela siempre habráno notado la ausencia de esta opción, añadida en la versión 2.0 de C# y no demasiado conocida por los desarrolladores que aun no han cambiado totalmente el chip desde la versión 1.1 de <a href="http://msdn.microsoft.com/en-us/netframework/default.aspx" title=".NET Framework Developer Center" target="_blank">.NET Framework</a> (desgraciadamente, demasiados hoy en día).</p>
<p>¿Qué es un método anónimo? A veces hay situaciones donde debemos utilizar determinados pedazos de código que no vamos a usar más adelante en nuestro programa a modo de método o función, por lo que no es necesario realizar un esfuerzo extra para refactorizar nuestro código o crear zonas reutilizables. Una clara situación: el envío de un método delegado como parámetro para una función.</p>
<p>Tradicionalmente, para poder pasar un método como parámetro, debíamos primero definir un tipo de delegado, crear dicho método, y enviarlo como parámetro:</p>
<blockquote><p><strong>public delegate void </strong>MiDelegado(<strong>int </strong>x);</p>
<p>/* &#8230; */</p>
<p><strong>public bool </strong>ProbarMetodo(<strong>MiDelegado </strong>metodo) <strong>{ </strong>int i = 5; /* &#8230; */ <strong>return </strong>metodo(i); }</p>
<p><strong>void </strong>MiFuncion(<strong>int </strong>x) { <strong>return </strong>x*2; }</p>
<p>/* ..  */</p>
<p>//Llamamos al método pasando como parámetro un delegado<br />
<strong>this</strong>.ProbarMetodo(<strong>this</strong>.MiFuncion);</p></blockquote>
<p>Vamos&#8230; un completo engorro. Es entonces cuando entran en juego nuestros amigos los métodos anónimos, donde en lugar de crear un tipo de delegado e ir pasandolo engorrosamente, introducimos la implementación del método directamente en la llamada:</p>
<blockquote><p><strong>this</strong>.ProbarMetodo(<strong>delegate </strong>(<strong>int </strong>x) { <strong>return </strong>x*2; });</p></blockquote>
<p>Como veis, esto nos facilita mucho la existencia: es algo más complicado de leer y comprender (pese a que este ejemplo es bien sencillo) pero ganamos a la hora de simplificar la estructura de métodos de nuestra clase. Todo un logro de los creadores de C# 2.0, y un gran punto donde <a href="http://www.microsoft.com/spanish/msdn/articulos/archivo/041206/voices/CSharp3Specification.mspx" title="Especificaciones de C# 3.0, un poco atrasadas" target="_blank">C# 3.0</a> tiene uno de sus pilares de soporte centrales para la creación de la API de <a href="http://en.wikipedia.org/wiki/Language_Integrated_Query" title="Linq" target="_blank">LINQ</a> y su nueva sintaxis, y muy útil para las nuevas funciones lambda que nos alegran la vida con la nueva versión del lenguaje.</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Bookmark</em></strong></a>
<br />
<div class="d">
<br />
<a href="http://buzz.yahoo.com/submit?submitUrl=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fmetodos-anonimos%2F&amp;submitHeadline=M%C3%A9todos+an%C3%B3nimos&amp;submitSummary=" rel="nofollow" title="Añadir a&nbsp;Buzz"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/buzz.png" title="Añadir a&nbsp;Buzz" alt="Añadir a&nbsp;Buzz" /></a>
<a href="http://del.icio.us/post?url=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fmetodos-anonimos%2F&amp;title=M%C3%A9todos+an%C3%B3nimos" rel="nofollow" title="Añadir a&nbsp;Del.icio.us"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/delicious.png" title="Añadir a&nbsp;Del.icio.us" alt="Añadir a&nbsp;Del.icio.us" /></a>
<a href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fmetodos-anonimos%2F&amp;title=M%C3%A9todos+an%C3%B3nimos" rel="nofollow" title="Añadir a&nbsp;digg"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/digg.png" title="Añadir a&nbsp;digg" alt="Añadir a&nbsp;digg" /></a>
<a href="http://www.dotnetkicks.com/kick/?url=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fmetodos-anonimos%2F&amp;title=M%C3%A9todos+an%C3%B3nimos" rel="nofollow" title="Añadir a&nbsp;DotNetKicks"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/dotnetkicks.png" title="Añadir a&nbsp;DotNetKicks" alt="Añadir a&nbsp;DotNetKicks" /></a>
<a href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fmetodos-anonimos%2F" rel="nofollow" title="Añadir a&nbsp;Facebook"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/facebook.png" title="Añadir a&nbsp;Facebook" alt="Añadir a&nbsp;Facebook" /></a>
<a href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fmetodos-anonimos%2F&amp;title=M%C3%A9todos+an%C3%B3nimos" rel="nofollow" title="Añadir a&nbsp;Google Bookmarks"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/google.png" title="Añadir a&nbsp;Google Bookmarks" alt="Añadir a&nbsp;Google Bookmarks" /></a>
<a href="http://www.mister-wong.com/index.php?action=addurl&amp;bm_url=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fmetodos-anonimos%2F&amp;bm_description=M%C3%A9todos+an%C3%B3nimos" rel="nofollow" title="Añadir a&nbsp;Mister Wong"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/misterwong.png" title="Añadir a&nbsp;Mister Wong" alt="Añadir a&nbsp;Mister Wong" /></a>
<a href="http://reddit.com/submit?url=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fmetodos-anonimos%2F&amp;title=M%C3%A9todos+an%C3%B3nimos" rel="nofollow" title="Añadir a&nbsp;reddit"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/reddit.png" title="Añadir a&nbsp;reddit" alt="Añadir a&nbsp;reddit" /></a>
<a href="http://slashdot.org/bookmark.pl?url=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fmetodos-anonimos%2F&amp;title=M%C3%A9todos+an%C3%B3nimos" rel="nofollow" title="Añadir a&nbsp;Slashdot"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/slashdot.png" title="Añadir a&nbsp;Slashdot" alt="Añadir a&nbsp;Slashdot" /></a>
<a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fmetodos-anonimos%2F&amp;title=M%C3%A9todos+an%C3%B3nimos" rel="nofollow" title="Añadir a&nbsp;Stumble Upon"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Añadir a&nbsp;Stumble Upon" alt="Añadir a&nbsp;Stumble Upon" /></a>
<a href="http://www.technorati.com/faves?add=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fmetodos-anonimos%2F" rel="nofollow" title="Añadir a&nbsp;Technorati"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/technorati.png" title="Añadir a&nbsp;Technorati" alt="Añadir a&nbsp;Technorati" /></a>
<a href="http://tipd.com/submit.php?url=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fmetodos-anonimos%2F" rel="nofollow" title="Añadir a&nbsp;Tip'd"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/tipd.png" title="Añadir a&nbsp;Tip'd" alt="Añadir a&nbsp;Tip'd" /></a>
<a href="http://twitter.com/home/?status=Check+out+M%C3%A9todos+an%C3%B3nimos+@+http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fmetodos-anonimos%2F" rel="nofollow" title="Añadir a&nbsp;Twitter"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/twitter.png" title="Añadir a&nbsp;Twitter" alt="Añadir a&nbsp;Twitter" /></a>
<a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fmetodos-anonimos%2F&amp;t=M%C3%A9todos+an%C3%B3nimos" rel="nofollow" title="Añadir a&nbsp;Yahoo My Web"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Añadir a&nbsp;Yahoo My Web" alt="Añadir a&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://www.moure.es/2008/06/metodos-anonimos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>YouTube API con .NET</title>
		<link>http://www.moure.es/2008/06/youtube-api-con-net/</link>
		<comments>http://www.moure.es/2008/06/youtube-api-con-net/#comments</comments>
		<pubDate>Sat, 21 Jun 2008 23:01:35 +0000</pubDate>
		<dc:creator>moure</dc:creator>
				<category><![CDATA[moure.es]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[youtube]]></category>

		<guid isPermaLink="false">http://www.moure.es/?p=51</guid>
		<description><![CDATA[La API de YouTube, al igual que muchas otras de Google, está basada en RSS y por tanto en XML, pudiendo así equipararlo con un servicio web pese a no existir una llamada RPC (para aquellos conservadores que aun consideran los web services como ejecuciones a distancia XML-RPC y no peticiones de datos XML como [...]]]></description>
			<content:encoded><![CDATA[<p>La API de YouTube, al igual que muchas otras de Google, está basada en RSS y por tanto en XML, pudiendo así equipararlo con un servicio web pese a no existir una llamada RPC (para aquellos conservadores que aun consideran los web services como ejecuciones a distancia XML-RPC y no peticiones de datos XML como puede explicarse hoy en día utilizando algunas de las referencias más importantes de Internet).</p>
<p>Por lo tanto, para cualquier uso que queramos realizar de las API de YouTube para tomar datos de videos, usuarios y temáticas, podremos hacer uso de la gran colección de herramientas y clases del framework de Microsoft para comunicarnos con la aplicación de Google.</p>
<p>Como siempre, cada uno tiene su sistema, y yo tengo el mio propio. Como ya sabreis, soy una persona muy purista y tengo por tendencia utilizar sistemas del más bajo nivel siempre que está en mi mano, por lo que no es dificil intuir la manera en que consumo y exploto las API de Google basadas en XML.</p>
<p>Para empezar, comienzo por descargarme el mensaje XML desde su origen. Tomemos como ejemplo la petición de datos de un video concreto:</p>
<blockquote><p><strong>using </strong>System.Net;</p>
<p>/* ############ */</p>
<p><strong>string </strong>url = &#8220;http://gdata.youtube.com/feeds/api/videos/[codigo youtube del video]&#8220;;<br />
<strong>WebClient </strong>wc = new <strong>WebClient</strong>();<br />
<strong>string </strong>xml_file_stream = wc.DownloadString(url);</p>
<p><strong>XmlDocument </strong>xdoc = new <strong>XmlDocument</strong>();<br />
xdoc.LoadXml(xml_file_stream);</p></blockquote>
<p>De este modo descargamos el fichero XML que contiene la información referente al video del que queremos recuperar sus datos y lo cargamos en un objeto de tipo XmlDocument, estructura que podremos manipular a nuestro libre antojo.</p>
<p>En otro post, analizaré y mostraré los diferentes campos de la secuencia devuelta como XML y la utilidad que podemos sacarle para neustras aplicaciones tanto en ASP.NET como Windows Forms.</p>
<p>Personalmente, lo veo muy interesante para realizar integraciones de contenidos entre diferentes temas, usuarios o localizaciones geográficas, que podremos facilmente compartir en nuestras aplicaciones y dar servicios extra a neustros clientes y usuarios finales.</p>
<p>Pero, como siempre, el uso final estará en manos de todos nosotros: los desarrolladores, programadores y diseñadores software.</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Bookmark</em></strong></a>
<br />
<div class="d">
<br />
<a href="http://buzz.yahoo.com/submit?submitUrl=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fyoutube-api-con-net%2F&amp;submitHeadline=YouTube+API+con+.NET&amp;submitSummary=" rel="nofollow" title="Añadir a&nbsp;Buzz"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/buzz.png" title="Añadir a&nbsp;Buzz" alt="Añadir a&nbsp;Buzz" /></a>
<a href="http://del.icio.us/post?url=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fyoutube-api-con-net%2F&amp;title=YouTube+API+con+.NET" rel="nofollow" title="Añadir a&nbsp;Del.icio.us"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/delicious.png" title="Añadir a&nbsp;Del.icio.us" alt="Añadir a&nbsp;Del.icio.us" /></a>
<a href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fyoutube-api-con-net%2F&amp;title=YouTube+API+con+.NET" rel="nofollow" title="Añadir a&nbsp;digg"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/digg.png" title="Añadir a&nbsp;digg" alt="Añadir a&nbsp;digg" /></a>
<a href="http://www.dotnetkicks.com/kick/?url=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fyoutube-api-con-net%2F&amp;title=YouTube+API+con+.NET" rel="nofollow" title="Añadir a&nbsp;DotNetKicks"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/dotnetkicks.png" title="Añadir a&nbsp;DotNetKicks" alt="Añadir a&nbsp;DotNetKicks" /></a>
<a href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fyoutube-api-con-net%2F" rel="nofollow" title="Añadir a&nbsp;Facebook"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/facebook.png" title="Añadir a&nbsp;Facebook" alt="Añadir a&nbsp;Facebook" /></a>
<a href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fyoutube-api-con-net%2F&amp;title=YouTube+API+con+.NET" rel="nofollow" title="Añadir a&nbsp;Google Bookmarks"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/google.png" title="Añadir a&nbsp;Google Bookmarks" alt="Añadir a&nbsp;Google Bookmarks" /></a>
<a href="http://www.mister-wong.com/index.php?action=addurl&amp;bm_url=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fyoutube-api-con-net%2F&amp;bm_description=YouTube+API+con+.NET" rel="nofollow" title="Añadir a&nbsp;Mister Wong"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/misterwong.png" title="Añadir a&nbsp;Mister Wong" alt="Añadir a&nbsp;Mister Wong" /></a>
<a href="http://reddit.com/submit?url=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fyoutube-api-con-net%2F&amp;title=YouTube+API+con+.NET" rel="nofollow" title="Añadir a&nbsp;reddit"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/reddit.png" title="Añadir a&nbsp;reddit" alt="Añadir a&nbsp;reddit" /></a>
<a href="http://slashdot.org/bookmark.pl?url=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fyoutube-api-con-net%2F&amp;title=YouTube+API+con+.NET" rel="nofollow" title="Añadir a&nbsp;Slashdot"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/slashdot.png" title="Añadir a&nbsp;Slashdot" alt="Añadir a&nbsp;Slashdot" /></a>
<a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fyoutube-api-con-net%2F&amp;title=YouTube+API+con+.NET" rel="nofollow" title="Añadir a&nbsp;Stumble Upon"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Añadir a&nbsp;Stumble Upon" alt="Añadir a&nbsp;Stumble Upon" /></a>
<a href="http://www.technorati.com/faves?add=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fyoutube-api-con-net%2F" rel="nofollow" title="Añadir a&nbsp;Technorati"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/technorati.png" title="Añadir a&nbsp;Technorati" alt="Añadir a&nbsp;Technorati" /></a>
<a href="http://tipd.com/submit.php?url=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fyoutube-api-con-net%2F" rel="nofollow" title="Añadir a&nbsp;Tip'd"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/tipd.png" title="Añadir a&nbsp;Tip'd" alt="Añadir a&nbsp;Tip'd" /></a>
<a href="http://twitter.com/home/?status=Check+out+YouTube+API+con+.NET+@+http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fyoutube-api-con-net%2F" rel="nofollow" title="Añadir a&nbsp;Twitter"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/twitter.png" title="Añadir a&nbsp;Twitter" alt="Añadir a&nbsp;Twitter" /></a>
<a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fyoutube-api-con-net%2F&amp;t=YouTube+API+con+.NET" rel="nofollow" title="Añadir a&nbsp;Yahoo My Web"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Añadir a&nbsp;Yahoo My Web" alt="Añadir a&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://www.moure.es/2008/06/youtube-api-con-net/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Conexiones a base de datos en ASP.NET 2.0</title>
		<link>http://www.moure.es/2008/06/conexiones-a-base-de-datos-en-aspnet-20/</link>
		<comments>http://www.moure.es/2008/06/conexiones-a-base-de-datos-en-aspnet-20/#comments</comments>
		<pubDate>Wed, 18 Jun 2008 22:15:56 +0000</pubDate>
		<dc:creator>moure</dc:creator>
				<category><![CDATA[asp.net]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[informática]]></category>
		<category><![CDATA[moure.es]]></category>
		<category><![CDATA[]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[sqlserver]]></category>

		<guid isPermaLink="false">http://www.moure.es/?p=49</guid>
		<description><![CDATA[Existen muchas maneras de gestionar el acceso a bases de datos desde ASP.NET, unos mejores que otros, y sin duda cada uno tenemos nuestro propio sistema (&#8220;Cada maestrillo tiene su librillo&#8220;, como siempre me han dicho en mi casa). ¿Cuál creeis que puede ser el mejor? Por supuesto a la hora de elegir el sistema [...]]]></description>
			<content:encoded><![CDATA[<p>Existen muchas maneras de gestionar el acceso a bases de datos desde ASP.NET, unos mejores que otros, y sin duda cada uno tenemos nuestro propio sistema (&#8220;<em>Cada maestrillo tiene su librillo</em>&#8220;, como siempre me han dicho en mi casa). ¿Cuál creeis que puede ser el mejor?</p>
<p>Por supuesto a la hora de elegir el sistema más apropiado tendremos que tener en cuenta toda una serie de factores, ventajas y desventajas, de cada uno de los diferentes modos existentes:</p>
<ol>
<li>Gestión centralizada :: las conexiones a la base de datos son administradas en una clase común accesible desde cualquier punto de la aplicación (ahorro de recursos a la hora de abrir y cerrar conexiones y realizar consultas ligeras o atómicas.</li>
<li>Gestión individual :: abrir y cerrar la conexión cada vez que sea necesario lanzar comandos hacia la base de datos.</li>
</ol>
<p>Desde un punto de vista organizativo, no hay duda que la centralización es la mejor opción: atomización del control de base de datos, administración localizada en un punto de todo el tráfico de datos, y disminución de la complejidad del código. Ahora bien, el diseño de un sistema que permita este tipo de trabajo, aunque no imposible, es relativamente complicado: debemos tener en cuenta que toda aplicación web, al menos en la mayor parte de los casos, deberá soportar un cierto grado de concurrencia de usuarios de manera simultánea, por lo que podemos descartar el uso de variables <em>static</em> (o <em>shared</em> en VisualBasic), ya que estas son compartidas en todas las instancias de la aplicación web en ejecución.</p>
<p>Analicemos la posible solución como conexión común en una variable <em>static</em>:</p>
<blockquote><p><strong>class </strong>ClaseComun { <strong>private static</strong> <strong>SqlConnection </strong>__connection; }</p></blockquote>
<p>Vemos que definimos una clase que contiene la variable privada estática que almacena una conexión de tipo SqlConnection (proveedor de conexión para SQL Server integrado en Microsoft .NET). Vamos a añadir una propiedad a la clase:</p>
<blockquote><p><strong>public static SqlConnection</strong> Connection<br />
{</p>
<blockquote><p><strong>get </strong>{ <strong>if </strong>(__connection == <strong>null</strong>) { __connection = <strong>new SqlConnection</strong>(connection_string); __connection.Open(); }</p></blockquote>
<p>}</p></blockquote>
<p>Como podemos apreciar, la propiedad creada es de solo lectura: queremos que la conexión quede solo definida por el interior de nuestra clase, aislandola del resto de la aplicación.</p>
<p>Por el momento, todo parece correcto, especialmente para aquellos que estén familiarizados con aplicaciones basadas en Windows Forms, donde este tipo de trabajo es oportuno y francamente útil.</p>
<p>El problema viene cuando lo utilizamos en una aplicación ASP.NET: imaginemos un usuario que entra por primera vez en la página. Al realizar su petición al servidor, ésta será ejecutada, y de no existir una instancia para la variable estática, se creará un objeto SqlConnection y se abrirá la conexión con la base de datos SQL Server.</p>
<p>Ahora bien&#8230; Otro usuario, casi de manera simultánea pero unos microsegundos después, solicita al servidor otro acceso. El código ASP.NET, volverá a comprobar la existencia de la variable de conexión, que ya estará instanciada y por tanto no realizará ninguna otra gestión sobre la conexión. Ahora bien&#8230; el código ejecutará sus consecuentes peticiones de datos y&#8230; ¡peligro! Dos usuarios están usando la misma conexión con la base de datos.</p>
<p>Pese a ser un modo bastante elegante de centralizar la gestión de conexiones, es mortalmente peligroso para aplicaciones web concurrentes. Por lo tanto, pasaremos a la siguiente opción.</p>
<p>Aunque pueda parecer una opción menos eficiente frente a la anterior, la mejor opción bajo mi punto de vista es crear una instancia de la conexión SqlConnection para cada consulta que vayamos a realizar, la abramos, ejecutemos la petición a la base de datos, y luego la cerremos:</p>
<blockquote><p><strong>SqlConnection </strong>cnx = <strong>new SqlConnection</strong>(connection_string);<br />
cnx.Open();<br />
<strong>SqlCommand </strong>cmd = <strong>new SqlCommand</strong>(&#8220;SELECT COUNT(*) FROM table_of_clients&#8221;, cnx);<br />
<strong>object </strong>obj = cmd.ExecuteScalar();<br />
/* &#8230; */<br />
cnx.Close();</p></blockquote>
<p>Como vemos, estamos creando una instancia de la conexión para realizar una consulta por lo demás simple, que se abre y se cierra para lanzar la petición a la base de datos. Puede parecer redundante y una pérdida letal de recursos, con una inclusión indiscriminada de líneas extra en el código fuente de nuestra aplicación.</p>
<p>Pero, en el caso de una aplicación web de cierta complejidad donde deban lanzarse varias consultas en una misma petición del usuario al servidor web, ¿es una buena práctica abrir y cerrar la conexión tantas veces? ¿es eficiente?</p>
<p>La respuesta es si. Gracias a las capacidades de <em>connection pooling</em> de ASP.NET y SQL Server ganaremos en eficacia y calidad sin perder recursos por el camino. ¿En qué consiste el connection pooling? Lo explicaré en el próximo post de mi blog, donde podreis comprobar su funcionamiento con algunos ejemplos sencillos que espero os sean de utilidad.</p>
<p>Una cosa os aseguro: ganareis, de lejos, numerosas ventajas frente a otros métodos tradicionales de trabajo.</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Bookmark</em></strong></a>
<br />
<div class="d">
<br />
<a href="http://buzz.yahoo.com/submit?submitUrl=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fconexiones-a-base-de-datos-en-aspnet-20%2F&amp;submitHeadline=Conexiones+a+base+de+datos+en+ASP.NET+2.0&amp;submitSummary=" rel="nofollow" title="Añadir a&nbsp;Buzz"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/buzz.png" title="Añadir a&nbsp;Buzz" alt="Añadir a&nbsp;Buzz" /></a>
<a href="http://del.icio.us/post?url=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fconexiones-a-base-de-datos-en-aspnet-20%2F&amp;title=Conexiones+a+base+de+datos+en+ASP.NET+2.0" rel="nofollow" title="Añadir a&nbsp;Del.icio.us"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/delicious.png" title="Añadir a&nbsp;Del.icio.us" alt="Añadir a&nbsp;Del.icio.us" /></a>
<a href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fconexiones-a-base-de-datos-en-aspnet-20%2F&amp;title=Conexiones+a+base+de+datos+en+ASP.NET+2.0" rel="nofollow" title="Añadir a&nbsp;digg"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/digg.png" title="Añadir a&nbsp;digg" alt="Añadir a&nbsp;digg" /></a>
<a href="http://www.dotnetkicks.com/kick/?url=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fconexiones-a-base-de-datos-en-aspnet-20%2F&amp;title=Conexiones+a+base+de+datos+en+ASP.NET+2.0" rel="nofollow" title="Añadir a&nbsp;DotNetKicks"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/dotnetkicks.png" title="Añadir a&nbsp;DotNetKicks" alt="Añadir a&nbsp;DotNetKicks" /></a>
<a href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fconexiones-a-base-de-datos-en-aspnet-20%2F" rel="nofollow" title="Añadir a&nbsp;Facebook"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/facebook.png" title="Añadir a&nbsp;Facebook" alt="Añadir a&nbsp;Facebook" /></a>
<a href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fconexiones-a-base-de-datos-en-aspnet-20%2F&amp;title=Conexiones+a+base+de+datos+en+ASP.NET+2.0" rel="nofollow" title="Añadir a&nbsp;Google Bookmarks"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/google.png" title="Añadir a&nbsp;Google Bookmarks" alt="Añadir a&nbsp;Google Bookmarks" /></a>
<a href="http://www.mister-wong.com/index.php?action=addurl&amp;bm_url=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fconexiones-a-base-de-datos-en-aspnet-20%2F&amp;bm_description=Conexiones+a+base+de+datos+en+ASP.NET+2.0" rel="nofollow" title="Añadir a&nbsp;Mister Wong"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/misterwong.png" title="Añadir a&nbsp;Mister Wong" alt="Añadir a&nbsp;Mister Wong" /></a>
<a href="http://reddit.com/submit?url=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fconexiones-a-base-de-datos-en-aspnet-20%2F&amp;title=Conexiones+a+base+de+datos+en+ASP.NET+2.0" rel="nofollow" title="Añadir a&nbsp;reddit"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/reddit.png" title="Añadir a&nbsp;reddit" alt="Añadir a&nbsp;reddit" /></a>
<a href="http://slashdot.org/bookmark.pl?url=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fconexiones-a-base-de-datos-en-aspnet-20%2F&amp;title=Conexiones+a+base+de+datos+en+ASP.NET+2.0" rel="nofollow" title="Añadir a&nbsp;Slashdot"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/slashdot.png" title="Añadir a&nbsp;Slashdot" alt="Añadir a&nbsp;Slashdot" /></a>
<a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fconexiones-a-base-de-datos-en-aspnet-20%2F&amp;title=Conexiones+a+base+de+datos+en+ASP.NET+2.0" rel="nofollow" title="Añadir a&nbsp;Stumble Upon"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Añadir a&nbsp;Stumble Upon" alt="Añadir a&nbsp;Stumble Upon" /></a>
<a href="http://www.technorati.com/faves?add=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fconexiones-a-base-de-datos-en-aspnet-20%2F" rel="nofollow" title="Añadir a&nbsp;Technorati"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/technorati.png" title="Añadir a&nbsp;Technorati" alt="Añadir a&nbsp;Technorati" /></a>
<a href="http://tipd.com/submit.php?url=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fconexiones-a-base-de-datos-en-aspnet-20%2F" rel="nofollow" title="Añadir a&nbsp;Tip'd"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/tipd.png" title="Añadir a&nbsp;Tip'd" alt="Añadir a&nbsp;Tip'd" /></a>
<a href="http://twitter.com/home/?status=Check+out+Conexiones+a+base+de+datos+en+ASP.NET+2.0+@+http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fconexiones-a-base-de-datos-en-aspnet-20%2F" rel="nofollow" title="Añadir a&nbsp;Twitter"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/twitter.png" title="Añadir a&nbsp;Twitter" alt="Añadir a&nbsp;Twitter" /></a>
<a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Fwww.moure.es%2F2008%2F06%2Fconexiones-a-base-de-datos-en-aspnet-20%2F&amp;t=Conexiones+a+base+de+datos+en+ASP.NET+2.0" rel="nofollow" title="Añadir a&nbsp;Yahoo My Web"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Añadir a&nbsp;Yahoo My Web" alt="Añadir a&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://www.moure.es/2008/06/conexiones-a-base-de-datos-en-aspnet-20/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

