<?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>Gabriel Rodriguez Plancarte &#187; Arquitectura</title>
	<atom:link href="http://gabrielrodriguez.net/category/arquitectura/feed/" rel="self" type="application/rss+xml" />
	<link>http://gabrielrodriguez.net</link>
	<description>Tecnologia, Diseño, Negocios y Desarrollo</description>
	<lastBuildDate>Mon, 29 Mar 2010 07:58:45 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Automapper y un buen articulo de diseño de software</title>
		<link>http://gabrielrodriguez.net/automapper-y-un-buen-articulo-de-diseno-de-software/</link>
		<comments>http://gabrielrodriguez.net/automapper-y-un-buen-articulo-de-diseno-de-software/#comments</comments>
		<pubDate>Sat, 20 Mar 2010 06:36:38 +0000</pubDate>
		<dc:creator>Gabriel</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Arquitectura]]></category>
		<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[Mejores Practicas]]></category>
		<category><![CDATA[AutoMapper]]></category>
		<category><![CDATA[Patrones de Diseño]]></category>

		<guid isPermaLink="false">http://gabrielrodriguez.net/?p=716</guid>
		<description><![CDATA[
La semana pasada descubrí AutoMapper, que es un proyecto de .NET gratis y open-source de Jimmy Bogard.
Un desarrollador de la oficina me preguntó si había una manera integrada en el framework de transformar las clases generadas por LINQ-To-SQL en clases sencillas (DTOs). No creí que lo hubiera&#8230;pero le comenté que seguramente lo podía hacer por [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-728" title="Logo AutoMapper" src="http://gabrielrodriguez.net/wp-content/uploads/2010/03/automapper-logo.png" alt="Logo AutoMapper" width="480" height="49" /></p>
<p>La semana pasada descubrí <a title="AutoMapper" href="http://automapper.codeplex.com/">AutoMapper</a>, que es un proyecto de .NET gratis y open-source de <a title="Jimmy Bogard" href="http://www.lostechies.com/blogs/jimmy_bogard/default.aspx">Jimmy Bogard</a>.</p>
<p>Un desarrollador de la oficina me preguntó si había una manera integrada en el framework de transformar las clases generadas por LINQ-To-SQL en clases sencillas (DTOs). No creí que lo hubiera&#8230;pero le comenté que seguramente lo podía hacer por Reflection. Yo ya habia hecho eso antes, pero supuse que debía haber alguna mejor manera. Después de buscar un poco en StackOverflow.com, alguna de las respuestas linkeaba a AutoMapper y descubrí que era exactamente lo que aquel desarrollador estaba buscando.</p>
<p><strong>AutoMapper </strong>es descrito en su página principal de la siguiente manera:</p>
<p><em>AutoMapper uses a fluent configuration API to define an object-object  mapping strategy.  AutoMapper uses a convention-based matching algorithm  to match up source to destination values.  Currently, AutoMapper is  geared towards model projection scenarios to flatten complex object  models to DTOs and other simple objects, whose design is better suited  for serialization, communication, messaging, or simply an  anti-corruption layer between the domain and application layer.</em></p>
<p>Excelente&#8230;no solo utiliza <a title="Fluent Interfaces" href="http://en.wikipedia.org/wiki/Fluent_interface"><strong>interfaces fluidas</strong></a>, sino que también se basa en <a title="Convention over Configuration" href="http://en.wikipedia.org/wiki/Convention_over_configuration"><strong>Convention Over Configuration</strong></a>. Es decir&#8230;solo tenemos que (y podemos!) configurar las situaciones excepcionales. Las <strong>ventajas </strong>que le veo a utilizar AutoMapper (a pesar de estar incorporando una referencia más a nuestros proyectos) es que es un proyecto público (de open source) y que además tiene a un muy buen desarrollador respaldándolo, que por ser su proyecto, se enfoca en mejorarlo y perfeccionarlo con nuevas funcionalidades, haciéndolo más eficiente, etc. Además, debido a que ya tiene una considerable base de usuarios (3,702 downloads), la mayoría de los bugs que pudiéramos toparnos, ya han sido resueltos.</p>
<p>Un <strong>ejemplo </strong>exagerádamente básico del uso de AutoMapper:</p>
<pre class="brush: csharp;">

public class Class1
 {
   public string FullName { get; set; }
   public int Age { get; set; }
   public char Gender { get; set; }
   public void DoIt()
   {
     Console.WriteLine(&quot;Test&quot;);
   }

   public List&lt;string&gt; Addresses { get; set; }

   public Class1()
   {
     Addresses = new List&lt;string&gt;();
   }
 }

 public class Class2
 {
   public string FullName { get; set; }
   public int Age { get; set; }
   public char Gender { get; set; }
 }

private void Form1_Load(object sender, EventArgs e)
{
   Mapper.CreateMap&lt;Class1, Class2&gt;();

   var c2 = Mapper.Map&lt;Class1, Class2&gt;(c1);
   MessageBox.Show(c2.FullName);
}
</pre>
<p>Ok, de este ejemplo podemos ver:</p>
<ul>
<li>Class1 es poco más compleja que Class2, ya que tiene una List&lt;string&gt; y un método definido (DoIt())</li>
<li>Class2 es una versión simple de Class1, con el objetivo de funcionar como un <a title="Data Transfer Object" href="http://en.wikipedia.org/wiki/Data_transfer_object"><strong>Data Transfer Object</strong></a>.</li>
</ul>
<p>Como pueden ver, con la instrucción:</p>
<pre class="brush: csharp;">
Mapper.CreateMap&lt;Class1, Class2&gt;();
</pre>
<p>estamos indicándole a AutoMapper que la Class1 y Class2 están relacionadas (mappeadas). Y la siguiente línea de código:</p>
<pre class="brush: csharp;">
var c2 = Mapper.Map&lt;Class1, Class2&gt;(c1);&lt;/pre&gt;
</pre>
<p>está creando una instancia de tipo Class2, basada en la instancia de c1 que ya teníamos, inicializada y asignando dinámicamente los valores de dicha instancia (c1) a la nueva instancia c2.</p>
<p>Class1, en este caso, sería un ejemplo de una clase de LINQ-To-SQL, mientras que Class2 sería la clase que queremos usar como DTO.</p>
<p><strong>Esta funcionalidad es sólamente la más básica de AutoMapper (flattening</strong>). También soporta <strong>proyecciones </strong>(utilizar ciertas propiedades o sub-sets de un valor para mapear a otra propiedad), <strong>Listas y Arrays</strong>, etc. Para más información, visisten la <a title="Documentacion de AutoMapper" href="http://automapper.codeplex.com/documentation">documentación de AutoMapper</a>.</p>
<p>Y sobre el buen artículo de diseño&#8230;para mi sorpresa lo encontré 2 dias después de haber descubierto AutoMapper, y el artículo lo escribió Jimmy Bogard.</p>
<p>El artículo se llama originalmente &#8220;<a title="Strengthening your domain: Encapsulated collections" href="http://www.lostechies.com/blogs/jimmy_bogard/archive/2010/03/10/strengthening-your-domain-encapsulated-collections.aspx">Strengthening your domain: Encapsulated collections</a>&#8220;. Jimmy habla de como debemos de diseñar nuestras clases para <strong>no exponer inadvertidamente funcionalidad de más (extra, innecesaria) que podría permitir operaciones no lógicas sobre nuestras entidades</strong>, y enfocarnos en <strong>soportar exclusiva y claramente sólo las operaciones que el dominio de negocio debe permitir sobre las entidades de nuestro proyecto</strong>. El artículo también me hizo pensar que <strong>los accesors son algo que mucha gente no considera</strong> a la hora de exponer sus propiedades. Léanlo y si gustan dejar sus comentarios&#8230;adelante.</p>
]]></content:encoded>
			<wfw:commentRss>http://gabrielrodriguez.net/automapper-y-un-buen-articulo-de-diseno-de-software/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fundamentos de Programacion &#8211; Libro ebook gratis</title>
		<link>http://gabrielrodriguez.net/fundamentos-de-programacion-libro-ebook-gratis/</link>
		<comments>http://gabrielrodriguez.net/fundamentos-de-programacion-libro-ebook-gratis/#comments</comments>
		<pubDate>Mon, 03 Aug 2009 05:03:09 +0000</pubDate>
		<dc:creator>Gabriel</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Arquitectura]]></category>
		<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[Ebooks]]></category>
		<category><![CDATA[programacion]]></category>

		<guid isPermaLink="false">http://gabrielrodriguez.net/?p=448</guid>
		<description><![CDATA[Karl Seguin, blogger de CodeBetter.com, acaba de actualizar su serie de articulos convertidos a Ebook, llamado Foundations Of Programming.
El libro trata temas como:

Principios ideales de programación como YAGNI (You Aren&#8217;t Going to Need It), DRY (Don&#8217;t Repeat Yourself), Continuous Integration, Coupling, etc.
Domain Drive Design (DDD)
Dependency Injection
Unit Testing
Object Relational Mappers (ORMs)
Exception Handling.
Mocking

Y más. El libro es [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_449" class="wp-caption aligncenter" style="width: 250px"><img class="size-full wp-image-449" title="CodeBetter Logo" src="http://gabrielrodriguez.net/wp-content/uploads/2009/08/codebetter-logo.jpg" alt="CodeBetter Logo" width="240" height="74" /><p class="wp-caption-text">CodeBetter Logo</p></div>
<p><a title="Karl Seguin" href="http://codebetter.com/blogs/karlseguin/">Karl Seguin</a>, blogger de<strong> CodeBetter.com</strong>, acaba de actualizar su serie de articulos convertidos a Ebook, llamado <strong>Foundations Of Programming</strong>.</p>
<p>El libro trata temas como:</p>
<ul>
<li><strong>Principios ideales de programación</strong> como YAGNI (You Aren&#8217;t Going to Need It), DRY (Don&#8217;t Repeat Yourself), Continuous Integration, Coupling, etc.</li>
<li>Domain Drive Design (DDD)</li>
<li><strong>Dependency Injection</strong></li>
<li>Unit Testing</li>
<li><strong>Object Relational Mappers</strong> (ORMs)</li>
<li>Exception Handling.</li>
<li><strong>Mocking</strong></li>
</ul>
<p>Y más. El libro es bueno, y definitivamente creo que cualquiera de nosotros conoce la mayoría de los temas del libro, pero definitivamente<strong> se puede sacar mucho provecho de esta publicación</strong> que Karl se tomó el tiempo de hacer.</p>
<p>Ya sea que domines varios de estos temas y quieras familiarizarte con uno que no conoces, o que no sepas sobre arquitectura en general y quieras aprender, este libro te puede ayudar.</p>
<p>Esta serie de aprendizaje también<strong> incluye una aplicación de muestra</strong>, llamada <strong>Canvas Learning Application</strong>, que<strong> implementa varios de los principios de programación que se enseñan en el libro</strong>. Esto para los que nos gusta aprender de manera más practica, analizando código.</p>
<p>Las ligas al ebook y a la aplicación:</p>
<p><a title="Foundations Of Programming PDF" href="http://codebetter.com/media/p/179694.aspx">Foundations Of Programming (PDF)</a></p>
<p><a title="Foundations Of Programming (docx Word Document)" href="http://openmymind.net/FoundationsOfProgramming.docx">Foundations Of Programming (DocX)</a></p>
<p><a title="Canvas Learning Application - Foundations Of Programing Sample Application" href="http://codebetter.com/blogs/karlseguin/archive/2009/05/25/revisiting-codebetter-canvas.aspx">Canvas Learning Application (Sample Application)</a></p>
<p>Espero les sirva.</p>
]]></content:encoded>
			<wfw:commentRss>http://gabrielrodriguez.net/fundamentos-de-programacion-libro-ebook-gratis/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Guia de Arquitectura de Aplicaciones 2.0 (.NET Framework)</title>
		<link>http://gabrielrodriguez.net/guia-de-arquitectura-de-aplicaciones-net-20/</link>
		<comments>http://gabrielrodriguez.net/guia-de-arquitectura-de-aplicaciones-net-20/#comments</comments>
		<pubDate>Tue, 13 Jan 2009 06:08:53 +0000</pubDate>
		<dc:creator>Gabriel</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Arquitectura]]></category>
		<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[Patrones de Diseño]]></category>

		<guid isPermaLink="false">http://gabrielrodriguez.net/?p=63</guid>
		<description><![CDATA[
Para los que esten interesados o involucrados en el diseño de arquitecturas de aplicaciones utilizando el .NET Framework, el equipo de Patterns &#38; Practices (Patrones y Practicas) publicó el pasado 16 de Diciembre la Application Architecture Guide 2.0, es decir, la Guía de Arquitectura de Aplicaciones 2.0.
Tiene 4 secciones que son:

Fundamentos
Diseño
Capas (Layers)
Arqueotipos

La guía está muy [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_64" class="wp-caption aligncenter" style="width: 190px"><img class="size-medium wp-image-64" title="Microsoft .NET Framework" src="http://gabrielrodriguez.net/wp-content/uploads/2009/01/microsoft-net-logo-white-300x192.png" alt="Microsoft .NET Framework" width="180" height="115" /><p class="wp-caption-text">Microsoft .NET Framework</p></div>
<p style="text-align: center;">
<div id="attachment_65" class="wp-caption aligncenter" style="width: 310px"><img class="size-medium wp-image-65" title="Application Arquitecture Guide 2.0" src="http://gabrielrodriguez.net/wp-content/uploads/2009/01/logoapparchguide2-300x44.gif" alt="Application Arquitecture Guide 2.0" width="300" height="44" /><p class="wp-caption-text">Application Arquitecture Guide 2.0</p></div>
<p>Para los que esten interesados o involucrados en el <strong>diseño de arquitecturas de aplicaciones utilizando el .NET Framework</strong>, el equipo de Patterns &amp; Practices (Patrones y Practicas) publicó el pasado 16 de Diciembre la <span id="ctl00_ctl00_MasterContent_Content_TitleLabel" class="CodePlexPageHeader"><strong>Application Architecture Guide 2.0</strong>, es decir, la Guía de Arquitectura de Aplicaciones 2.0.</span></p>
<p>Tiene <strong>4 secciones</strong> que son:</p>
<ol>
<li>Fundamentos</li>
<li>Diseño</li>
<li>Capas (Layers)</li>
<li>Arqueotipos</li>
</ol>
<p>La guía está muy buena e interesante, además de que definitivamente es una <strong>buena fuente de conocimiento</strong> y entre sus principales objetivos está el ayudar al arquitecto a escoger las tecnologías más adecuadas para cada escenario que la aplicación pueda tener.</p>
<p>Aqui esta la liga a la <a title="Microsoft Patterns &amp; Practices Application Arquitecture Guide 2.0" href="http://www.codeplex.com/AppArchGuide/Release/ProjectReleases.aspx?ReleaseId=20586" target="_self">Application Arquitecture Guide 2.0</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gabrielrodriguez.net/guia-de-arquitectura-de-aplicaciones-net-20/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
