<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://msmvps.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Angel "Java" Lopez : Arquitectura</title><link>http://msmvps.com/blogs/lopez/archive/tags/Arquitectura/default.aspx</link><description>Tags: Arquitectura</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>Desarrollando aplicaciones en .NET</title><link>http://msmvps.com/blogs/lopez/archive/2009/10/12/desarrollando-aplicaciones-en-net.aspx</link><pubDate>Mon, 12 Oct 2009 17:08:40 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1731991</guid><dc:creator>lopez</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1731991</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2009/10/12/desarrollando-aplicaciones-en-net.aspx#comments</comments><description>&lt;p&gt;&lt;img style="display:inline;margin:0px 20px 20px 0px;" src="http://www.todocontenidos.com/images/articles/softdev.jpg" align="left" alt="" /&gt; En esta semana, comienzo a dictar el curso presencial que había anunciado en un anterior post:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/2009/09/19/preparando-un-curso-de-net-aplicaciones-patrones-y-arquitectura.aspx" target="_blank"&gt;Preparando un curso de .NET: aplicaciones, patrones y arquitectura&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;organizado por la gente del &lt;a href="http://www.mug.org.ar" target="_blank"&gt;Microsoft Users Group de Argentina&lt;/a&gt;. Gracias a todos los que dejaron sugerencias sobre el temario, ahí, y en listas de correo que consulté. Es un curso pago, pueden obtener más información en la &lt;a href="http://www.mug.org.ar/Eventos/3377.aspx" target="_blank"&gt;página de inscripción al curso&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;El temario a desarrollar es ambicioso:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Arquitectura de aplicaciones .NET&lt;/li&gt;    &lt;li&gt;Capas lógicas, capas físicas&lt;/li&gt;    &lt;li&gt;El gran Service Layer&lt;/li&gt;    &lt;li&gt;Persistencia&lt;/li&gt;    &lt;li&gt;Object Relational Mapping&lt;/li&gt;    &lt;li&gt;NHibernate, otros ORMs&lt;/li&gt;    &lt;li&gt;Reglas de Negocio&lt;/li&gt;    &lt;li&gt;Test-Driven Development&lt;/li&gt;    &lt;li&gt;Rhino Mocks, Moq, otros&lt;/li&gt;    &lt;li&gt;Inyección de dependencias&lt;/li&gt;    &lt;li&gt;Spring Framework y otros&lt;/li&gt;    &lt;li&gt;Separando responsabilidades&lt;/li&gt;    &lt;li&gt;Conceptos de Autorización, Autenticación, y Seguridad Federada&lt;/li&gt;    &lt;li&gt;Patrones en presentación: MVC, MVP, otros&lt;/li&gt;    &lt;li&gt;Tecnologías de presentación: WinForms, ASP.NET, ASP.NET MVC, conceptos de WPF, Silverlight&lt;/li&gt;    &lt;li&gt;Propuestas de Microsoft de Arquitectura&lt;/li&gt;    &lt;li&gt;Modelo de Dominio&lt;/li&gt;    &lt;li&gt;Domain-Driven Development&lt;/li&gt;    &lt;li&gt;Desarrollo en equipo&lt;/li&gt;    &lt;li&gt;Conceptos de Metodologías Agiles, XP, Scrum&lt;/li&gt;    &lt;li&gt;Repositorio de Código&lt;/li&gt;    &lt;li&gt;Integración Continua&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;además de algunas alternativas “exóticas” a explorar, como para amenizar estos temas. Presentaré ejemplos propios y otros de código abierto que están publicados en Internet.&lt;/p&gt;  &lt;p&gt;La idea es ir transmitiendo algunas de las técnicas e ideas que se están usando, para llevar a cabo un desarrollo en .NET. Bien podría dar un curso similar en Java: ambas plataformas son lo bastante maduras como para que podamos usarla en todos estos temas, y más. Y mucho de lo que se usa hoy en .NET, nació primero en Java y otras tecnologías.&lt;/p&gt;  &lt;p&gt;Mi idea es ir volcando por aquí, en este blog, algunos apuntes, resúmenes, notas de lo que dicte en el curso presencial. También compartir por acá enlaces sobre los temas que visitemos (más ejemplos, posts, herramientas, librerías). Es una forma de pasar en limpio, todo lo que entre todos tratemos en el curso, para que no quede solamente para los que asisten. Siempre dejo los ejemplos de los cursos que dicto en mi sitio, en &lt;a href="http://www.ajlopez.net/CursosEjemplos.php" target="_blank"&gt;Cursos y Seminarios: Ejemplos, Enlaces y Recursos&lt;/a&gt;, pero esta vez quisiera ir más lejos, y poner por escrito gran parte de lo que desarrollemos en el curso.&lt;/p&gt;  &lt;p&gt;Son varios temas: intentaré mostrar cómo se derivan de unos pocos principios y necesidades, en principio, de la complejidad y el cambio que acompañan a cualquier sistema de software no trivial y exitoso de estos días.&lt;/p&gt;  &lt;p&gt;(Tomé la imagen de este post de &lt;a title="http://www.leansoftwareinstitute.com/blog/" href="http://www.leansoftwareinstitute.com/blog/"&gt;http://www.leansoftwareinstitute.com/blog/&lt;/a&gt;, creo que refleja la belleza y complejidad de construir software).&lt;/p&gt;  &lt;p&gt;Nos leemos!&lt;/p&gt;  &lt;p&gt;Angel “Java” Lopez   &lt;br /&gt;&lt;a href="http://www.ajlopez.com"&gt;http://www.ajlopez.com&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1731991" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Arquitectura/default.aspx">Arquitectura</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+Agil/default.aspx">Desarrollo Agil</category></item><item><title>Preparando un curso de .NET: aplicaciones, patrones y arquitectura</title><link>http://msmvps.com/blogs/lopez/archive/2009/09/19/preparando-un-curso-de-net-aplicaciones-patrones-y-arquitectura.aspx</link><pubDate>Sat, 19 Sep 2009 14:20:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1724968</guid><dc:creator>lopez</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1724968</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2009/09/19/preparando-un-curso-de-net-aplicaciones-patrones-y-arquitectura.aspx#comments</comments><description>&lt;p&gt;Estoy preparando los temas y material, para un curso que dictar&amp;eacute; en el &lt;a href="http://www.mug.org.ar" target="_blank"&gt;Microsoft User Group de Argentina&lt;/a&gt;, en Octubre (seguramente quedar&amp;aacute; anunciado en el sitio del MUG). La idea es ir m&amp;aacute;s all&amp;aacute; de lo que ya d&amp;iacute; en los cursos de .NET cl&amp;aacute;sico (donde se muestra el framework, distintos tipos de aplicaciones), y un poco m&amp;aacute;s extenso que el que ya d&amp;iacute; sobre Arquitectura .NET.&lt;/p&gt;
&lt;p&gt;Mi lista de temas (tentativo) a tratar, con ejemplos a desarrollar (tengo que ordenar los temas):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Capas l&amp;oacute;gicas, y el gran patr&amp;oacute;n: Service Layer&lt;/li&gt;
&lt;li&gt;Capas f&amp;iacute;sicas, Service Interface/Service Gateway&lt;/li&gt;
&lt;li&gt;Object Relational Mapping&lt;/li&gt;
&lt;li&gt;Domain-Driven Design&lt;/li&gt;
&lt;li&gt;Test-Driven Development&lt;/li&gt;
&lt;li&gt;Dependency Injection&lt;/li&gt;
&lt;li&gt;Validaciones y Reglas de Negocio&lt;/li&gt;
&lt;li&gt;Cambiando la presentaci&amp;oacute;n&lt;/li&gt;
&lt;li&gt;Model View Controller, Model View Presenter y variantes (con distintas tecnolog&amp;iacute;as de presentaci&amp;oacute;n)&lt;/li&gt;
&lt;li&gt;Esas raras arquitecturas nuevas: aplicaciones distribuidas, grid computing, sharding, &amp;hellip;&lt;/li&gt;
&lt;li&gt;Tecnolog&amp;iacute;as: WinForms, ASP.NET, ASP.NET MVC, ASP.NET Ajax, WPF (quiz&amp;aacute;s Silverlight)&lt;/li&gt;
&lt;li&gt;Herramientas y librer&amp;iacute;as: Moq, NUnit, NHibernate, VS Tests, Spring.NET, Rhino Mocks, &amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;y seguramente alg&amp;uacute;n proyecto AjX&amp;hellip; :-)&lt;/p&gt;
&lt;p&gt;Como siempre, lo que produzcamos en el curso, enlaces a ejemplos ya existentes, ejemplos armados para el curso, quedar&amp;aacute;n en mi sitio, en &lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://www.ajlopez.net/CursosEjemplos.php"&gt;Materiales de Cursos&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Como no s&amp;eacute; si me dar&amp;aacute; el cuero para tratar tantos temas, les pregunto por ac&amp;aacute;: Cu&amp;aacute;les ser&amp;iacute;an sus temas preferidos? Falta alguno que prefieran a &amp;eacute;stos?&lt;/p&gt;
&lt;p&gt;Nos leemos!&lt;/p&gt;
&lt;p&gt;Angel &amp;ldquo;Java&amp;rdquo; Lopez   &lt;br /&gt;&lt;a href="http://www.ajlopez.com"&gt;http://www.ajlopez.com&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1724968" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Arquitectura/default.aspx">Arquitectura</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/DDD/default.aspx">DDD</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/TDD/default.aspx">TDD</category></item><item><title>Videos de MVC Public Service Announcement</title><link>http://msmvps.com/blogs/lopez/archive/2009/07/10/videos-de-mvc-public-service-announcement.aspx</link><pubDate>Fri, 10 Jul 2009 09:33:31 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1699219</guid><dc:creator>lopez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1699219</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2009/07/10/videos-de-mvc-public-service-announcement.aspx#comments</comments><description>&lt;p&gt;No sé si van a aprender mucho de Model View Controller, pero se van a entretener: :-)&lt;/p&gt;  &lt;h3&gt;MVC Public Service Announcement #1 - Controller Obesity&lt;/h3&gt;  &lt;p&gt;(Please visit the site to view this media)&lt;/p&gt;  &lt;h3&gt;MVC Public Service Announcement #2 - The Importance of Tests&lt;/h3&gt;  &lt;p&gt;(Please visit the site to view this media)&lt;/p&gt;  &lt;h3&gt;MVC Public Service Announcement #3 - Keeping Views Stupid&lt;/h3&gt;  &lt;p&gt;(Please visit the site to view this media)&lt;/p&gt;  &lt;h3&gt;MVC Public Service Announcement #4 - Staying RESTful&lt;/h3&gt;  &lt;p&gt;(Please visit the site to view this media)&lt;/p&gt;  &lt;h3&gt;MVC Public Service Announcement #5 : Outdated HTML&lt;/h3&gt;  &lt;p&gt;(Please visit the site to view this media)&lt;/p&gt;  &lt;h3&gt;MVC Public Service Announcement #6 : Modularity&lt;/h3&gt;  &lt;p&gt;(Please visit the site to view this media)&lt;/p&gt;  &lt;p&gt;Son Gregg Pollack &amp;amp; Jason Seifer (&lt;a href="http://railsenvy.com)/"&gt;http://RailsEnvy.com)&lt;/a&gt; junto a Adam Keys (&lt;a href="http://fiveruns.com)/"&gt;http://FiveRuns.com)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Pueden encontrar más videos del usuario &lt;a title="envyads" href="http://www.youtube.com/user/envyads"&gt;envyads&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Nos leemos!&lt;/p&gt;  &lt;p&gt;Angel “Java” Lopez    &lt;br /&gt;&lt;a href="http://www.ajlopez.com"&gt;http://www.ajlopez.com&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://facebook.com/ajlopez"&gt;http://facebook.com/ajlopez&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1699219" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/Arquitectura/default.aspx">Arquitectura</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Patrones/default.aspx">Patrones</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+Web/default.aspx">Desarrollo Web</category></item><item><title>ALT.NET Buenos Aires Primera Reunión</title><link>http://msmvps.com/blogs/lopez/archive/2009/05/10/alt-net-buenos-aires-primera-reuni-243-n.aspx</link><pubDate>Sun, 10 May 2009 10:26:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1692151</guid><dc:creator>lopez</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1692151</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2009/05/10/alt-net-buenos-aires-primera-reuni-243-n.aspx#comments</comments><description>&lt;p&gt;Ayer S&amp;aacute;bado 8 de Mayo, se realiz&amp;oacute; la primera reuni&amp;oacute;n de ALT.NET en Buenos Aires, en la sede de Microsoft Argentina (lindo lugar para reunirse, c&amp;oacute;modo, cerca del centro de Buenos Aires). Yo no pude ir, estuve ocupado, principalmente con el curso de Hacer Historia.&lt;/p&gt;
&lt;p&gt;Si quieren saber m&amp;aacute;s sobre el movimiento ALT.NET&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/2009/05/07/alt-net-argentina-alt-net-hispano-primera-reuni-243-n-en-buenos-aires.aspx" title="ALT.NET Argentina, ALT.NET Hispano, primera reuni&amp;oacute;n en Buenos Aires"&gt;ALT.NET Argentina, ALT.NET Hispano, primera reuni&amp;oacute;n en Buenos Aires&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Veo que twittearon con el tag &lt;a target="_blank" href="http://search.twitter.com/search?q=%23altnetba"&gt;#altnetba&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/altnetbatw.png" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;Leonardo Micheloni dej&amp;oacute; fotos en:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mail.google.com/mail/#inbox/1212b072ea470400" title="http://mail.google.com/mail/#inbox/1212b072ea470400"&gt;http://mail.google.com/mail/#inbox/1212b072ea470400&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/altnetba.png" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;Y el bueno de Luis Petek, uno de los sponsors &lt;a target="_blank" href="http://www.ap-sys.com/"&gt;AP Systems&lt;/a&gt;&amp;nbsp; tambi&amp;eacute;n dej&amp;oacute; sus fotos:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.facebook.com/home.php#/album.php?aid=2022442&amp;amp;id=1044461328" title="http://www.facebook.com/home.php#/album.php?aid=2022442&amp;amp;id=1044461328"&gt;http://www.facebook.com/home.php#/album.php?aid=2022442&amp;amp;id=1044461328&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img width="779" src="http://www.todocontenidos.com/images/articles/altnetbafb.png" height="535" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Bueno, a ver si alguien postea y escribe y describe lo que pas&amp;oacute;, c&amp;oacute;mo la vivi&amp;oacute; y dem&amp;aacute;s&amp;hellip;. Recuerden &lt;a target="_blank"&gt;lo que no est&amp;aacute; escrito no existe&lt;/a&gt;&amp;hellip; y &lt;a target="_blank" href="http://msmvps.com/blogs/lopez/archive/2008/01/15/don-t-be-a-canuto.aspx"&gt;no sean canutos&lt;/a&gt;, compartan con otros lo que vivieron, aprendieron y dem&amp;aacute;s&amp;hellip;&amp;nbsp; ;-)&lt;/p&gt;
&lt;p&gt;Porque sino, s&amp;oacute;lo quedan las fotos, esto ya parece un fotolog de Cumbio&amp;hellip; :-)&lt;/p&gt;
&lt;p&gt;Me perd&amp;iacute; las pizzas de La Continental&amp;hellip; ;-)&lt;/p&gt;
&lt;p&gt;Nos leemos!&lt;/p&gt;
&lt;p&gt;Angel &amp;ldquo;Java&amp;rdquo; Lopez &lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt; &lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Enjoying Pappo playing piano, Botafogo in guitar, third video &lt;a href="http://ajlopez.zoomblog.com/archivo/2009/04/19/mas-blues-con-Pappo.html" title="M&amp;aacute;s blues con Pappo"&gt;M&amp;aacute;s blues con Pappo&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1692151" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Arquitectura/default.aspx">Arquitectura</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category></item><item><title>Análisis de casos en Arquitectum.org</title><link>http://msmvps.com/blogs/lopez/archive/2009/02/20/an-225-lisis-de-casos-en-arquitectum-org.aspx</link><pubDate>Fri, 20 Feb 2009 08:16:48 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1672985</guid><dc:creator>lopez</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1672985</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2009/02/20/an-225-lisis-de-casos-en-arquitectum-org.aspx#comments</comments><description>&lt;p&gt;El miércoles pasado asistí al Architect Forum de Microsoft de Argentina. Muy interesante tarde, gracias a los buenos de &lt;a href="http://eglinsky.spaces.live.com/" target="_blank"&gt;Ezequiel Glinsky&lt;/a&gt; y &lt;a href="http://cid-bea5ca8140834d22.profile.live.com/?wa=wsignin1.0&amp;amp;sa=277563698" target="_blank"&gt;Juan Ladetto&lt;/a&gt; por la invitación (che, a ver cuando me invitan a algún desayuno de arquitectura...;-). Tuvo tres presentaciones principales. Mi idea es publicar un post detallada de cada una. Por ahora, pueden visitar el sitio &lt;a href="http://www.architectum.org"&gt;www.architectum.org&lt;/a&gt;:&lt;/p&gt; &lt;p&gt;&lt;a title="http://www.arquitectum.org" href="http://www.arquitectum.org"&gt;http://www.arquitectum.org&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/arquitectum.png" alt="" /&gt; &lt;/p&gt; &lt;p&gt;Pueden descargar las presentaciones (están como enlaces en cada título de tema) desde:&lt;/p&gt; &lt;p&gt;&lt;a title="http://www.arquitectum.org/portal/Eventos/ArchitectForums/tabid/62/Default.aspx" href="http://www.arquitectum.org/portal/Eventos/ArchitectForums/tabid/62/Default.aspx"&gt;http://www.arquitectum.org/portal/Eventos/ArchitectForums/tabid/62/Default.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Los casos presentados:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;a href="http://cid-61a2fa56528b029b.skydrive.live.com/self.aspx/.Public/caso%20despegar.com.pptx"&gt;Renovación de plataforma en Despegar.com: experiencias y aprendizajes&lt;/a&gt;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt; &lt;p&gt;Para acompañar el crecimiento pronosticado para los próximos años en la empresa y consolidarse como líder en la región, se ha decidido la renovación de la plataforma de la aplicación de ventas de servicios turísticos. Se comentará la experiencia del equipo de Despegar.com a lo largo de la implementación del motor de venta en internet basada en tecnología .NET. Se cubrirán aspectos de tecnología, arquitectura, metodología y lecciones aprendidas durante el proceso para compartir y discutir con la audiencia. &lt;p&gt;Oradores: &lt;/p&gt; &lt;p&gt;Carlos Granitto, Javier Canillas, Sergio Urin, Daniel Goldstein (Despegar.com)&lt;br /&gt;Diego Gonzalez (Lagash) &lt;p&gt;&lt;strong&gt;&lt;a href="http://cid-61a2fa56528b029b.skydrive.live.com/self.aspx/.Public/Caso%20MAE%20ORS%20v1.1.pptx"&gt;Implementación de una arquitectura de alta escalabilidad &amp;nbsp;en el Mercado Abierto Electrónico (MAE)&lt;/a&gt;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt; &lt;p&gt;Conectarse al mundo para proveer servicios implica estar preparado para soportar una concurrencia masiva de transacciones de manera robusta, escalable y con rendimientos adecuados. El estilo de arquitectura SEDA (Staged Event-Driven Architecture) se enfoca en la escalabilidad y descompone el diseño de servicios complejos en una serie de etapas interconectadas a través de colas. La descomposición del servicio en etapas independientemente desplegables provee la base para distribuir el procesamiento y el mecanismo de interconexión a través de colas aísla y amortigua la demanda masiva del servicio entre cada una de estas etapas. Durante esta sesión presentaremos una implementación de la arquitectura SEDA y su framework para desarrollo de aplicaciones construido bajo la plataforma y abanico de tecnologías .NET, que fueron desarrollados para la solución ORS (Order Routing System) de MAE. &lt;p&gt;Oradores: &lt;p&gt;Diego Anfossi (MAE)&lt;br /&gt;Gastón Real (Baufest) &lt;p&gt;&lt;strong&gt;&lt;a href="http://cid-61a2fa56528b029b.skydrive.live.com/self.aspx/.Public/Caso%20Banco%20Comafi%20-%20Portal%20Seguridad%20Inform%c3%a1tica.pptx"&gt;Eficiencia, Seguridad y Compliance A-la-Carte en Banco Comafi&lt;/a&gt;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt; &lt;p&gt;En búsqueda de hacer más eficiente sus procesos de Identity Management, Seguridad y Compliance, el Banco Comafi desarrolló en conjunto con Globant/Accendra una solución basada en la auto-gestión del empleado sin perder el control de la seguridad informática del Banco. El Portal de Seguridad Informática hace más fácil el trabajo diario de sus empleados y acelera los procesos internos sin perder de vista la auditoría y control de los sistemas. &lt;p&gt;Oradores: &lt;p&gt;Rafael Utrero (Comafi)&lt;br /&gt;Mariano Baldineli (Comafi)&lt;br /&gt;Martin Iglesias (Globant/Accendra) &lt;p&gt;Visiten el sitio &lt;p&gt;&lt;a title="http://www.arquitectum.org" href="http://www.arquitectum.org"&gt;http://www.arquitectum.org&lt;/a&gt; &lt;p&gt;donde van a encontrar material de otros eventos, anuncios de los que se vienen en marzo, y noticias relacionadas. &lt;p&gt;Nos leemos! &lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1672985" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Arquitectura/default.aspx">Arquitectura</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category></item><item><title>"Ver la luz" con generación de código y AjGenesis</title><link>http://msmvps.com/blogs/lopez/archive/2008/06/10/quot-ver-la-luz-quot-con-generaci-243-n-de-c-243-digo-y-ajgenesis.aspx</link><pubDate>Tue, 10 Jun 2008 14:02:59 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1633619</guid><dc:creator>lopez</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1633619</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2008/06/10/quot-ver-la-luz-quot-con-generaci-243-n-de-c-243-digo-y-ajgenesis.aspx#comments</comments><description>&lt;p&gt;Ayer dí una charla gratuita sobre generación de código, usando &lt;a href="http://www.ajlopez.com/ajgenesis" target="_blank"&gt;AjGenesis&lt;/a&gt;. Espero haber transmitido la idea de que es más que generación de código, y que va más allá de la tecnología actual.&lt;/p&gt; &lt;p&gt;Quisiera enumerar algunos posts relacionados con el tema, y comentarlos, así como enumerar enlaces y recursos.&lt;/p&gt; &lt;h3&gt;Posts sobre generación de código&lt;/h3&gt; &lt;p&gt;&lt;a title="Sobre la generaci&amp;oacute;n de c&amp;oacute;digo" href="http://msmvps.com/blogs/lopez/archive/2007/08/02/sobre-la-generaci-243-n-de-c-243-digo.aspx"&gt;Sobre la generación de código&lt;/a&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Este es el primer post a leer. Vemos ahí que el cambio de tecnología es una constante en la historia de desarrollo de software, y que no se ve en el horizonte una unificación de nada, ni de lenguajes ni de plataformas. Cada año que pasa, sabemos más de hacer sistemas, pero curiosamente, cada sistema nuevo necesita más codigo que el anterior, en general. Aún usando tecnologías que nos alivian el trabajo, por ejemplo, algún ORM (Object Relational Mapper), si la tecnología triunfa, el propio mercado nos lleva a hacer sistemas más complejos y grandes, y lo que ahorramos en código a escribir, luego lo perdemos en la mayor complejidad de lo sistemas que tenemos a nuestro alcance construir.&lt;/p&gt; &lt;p&gt;También se enumeran otras alternativas a la generación de código, y sus problemas. Las herramientas CASE son muy rígidas, o generales o abarcativas, así como UML y otras iniciativas. Lo que necesitamos son modelos específicos de nuestro dominio, y poder generar lo que querramos, de la forma que nos convenga. De ahí la necesidad de contar con un generador de código que no esté orientado a una tecnología a generar en particular, que sea de código abierto, y que genere lo que nosotros le indicamos, no lo que los autores de la herramienta quieren o pensaron inicialmente.&lt;/p&gt; &lt;p&gt;El usar frameworks propietarios, quedarse en una sola tecnología, tratar de generar todo en runtime apelando a metadata, o generar código desde XML aplicando transformaciones XSLT, son alternativas que creo que son inferiores o más complejas, como se explica en ese post.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;a title="Generando C&amp;oacute;digo- Hello World con AjGenesis" href="http://msmvps.com/blogs/lopez/archive/2006/11/19/generando-c-digo-hello-world-con-ajgenesis.aspx"&gt;Generando Código- Hello World con AjGenesis&lt;/a&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Esta es la &amp;quot;prueba ácida&amp;quot; de todo generador de código. Si una herramienta de ese tipo no nos ayuda a crear programas &amp;quot;Hola mundo&amp;quot;, con variantes, en distintas tecnologías, entonces no es lo bastante flexible. AjGenesis hace hincapié en la flexibilidad, la adaptibilidad a lo que Uds quieran producir, sin atarlos a una forma o metadata en particular.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;a title="Generando aplicaciones con AjGenesis" href="http://msmvps.com/blogs/lopez/archive/2007/06/25/generando-aplicaciones-con-ajgenesis.aspx"&gt;Generando aplicaciones con AjGenesis&lt;/a&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Un post algo viejo, pero que muestra cómo se pueden generar aplicaciones no triviales con esta herramienta.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;a title="AjGenesis- Modelo generado desde los assemblies" href="http://msmvps.com/blogs/lopez/archive/2007/11/27/ajgenesis-modelo-generado-desde-los-assemblies.aspx"&gt;AjGenesis- Modelo generado desde los assemblies&lt;/a&gt;&lt;br /&gt;&lt;a title="AjGenesis- Modelo desde la Base de Datos" href="http://msmvps.com/blogs/lopez/archive/2007/11/25/ajgenesis-modelo-desde-la-base-de-datos.aspx"&gt;AjGenesis- Modelo desde la Base de Datos&lt;/a&gt;&lt;br /&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Posts sobre cómo el modelo puede partir de otras fuentes, cualquiera que Uds. vean que sea conveniente. Luego, la propia herramienta puede mejorar, completar el modelo, hacer inferencias, o Uds. mismos completarlos, por ejemplo, si el modelo de base de datos no es lo bastante rico para darnos algo de semántica sobre el sistema que tenemos entre manos.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;a title="Generando c&amp;oacute;digo para NHibernate (Parte 3)" href="http://msmvps.com/blogs/lopez/archive/2007/10/29/generando-c-243-digo-para-nhibernate-parte-3.aspx"&gt;Generando código para NHibernate (Parte 3)&lt;/a&gt;&lt;br /&gt;&lt;a title="Generando c&amp;oacute;digo para NHibernate (Parte 2)" href="http://msmvps.com/blogs/lopez/archive/2007/09/25/generando-c-243-digo-para-nhibernate-parte-2.aspx"&gt;Generando código para NHibernate (Parte 2)&lt;/a&gt;&lt;br /&gt;&lt;a title="Generando c&amp;oacute;digo para NHibernate (Parte 1)" href="http://msmvps.com/blogs/lopez/archive/2007/08/05/generando-c-243-digo-para-nhibernate-parte-1.aspx"&gt;Generando código para NHibernate (Parte 1)&lt;/a&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Para ver que pueden usar AjGenesis para facilitar el desarrollo usando alguna librería reconocida por la comunidad, pueden leer esta serie de enlaces, donde gracias a una idea de Omar&amp;nbsp;del valle Rodríguez, se desarrollaron templates para usar NHibernate, y generar hasta una capa de presentación web para probar lo generado.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;a title="Hacia el AjGenesis Recipes" href="http://msmvps.com/blogs/lopez/archive/2007/11/20/hacia-el-ajgenesis-recipes.aspx"&gt;Hacia el AjGenesis Recipes&lt;/a&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Es un trabajo en progreso, para incorporar interacción con el usuario durante el proceso de generación de código.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;a title="Usando AjGenesis y NAnt" href="http://msmvps.com/blogs/lopez/archive/2007/11/01/usando-ajgenesis-y-nant.aspx"&gt;Usando AjGenesis y NAnt&lt;/a&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Explicación y enlaces para usar AjGenesis desde NAnt. Si alguien necesita una interfaz gráfica NAnt-GUI, pueden bajarla desde &lt;a title="NAnt-GUI" href="http://groups.google.com/group/codegeneration/t/2aef426f02370d1"&gt;NAnt-GUI&lt;/a&gt;&amp;nbsp;(preparado por Carlos Marcelo Santos, del &lt;a href="http://groups.google.com/group/codegeneration" target="_blank"&gt;grupo de generación de código&lt;/a&gt;)&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;a title="Genesis Studio- una IDE para AjGenesis" href="http://msmvps.com/blogs/lopez/archive/2007/12/24/genesis-studio-una-ide-para-ajgenesis.aspx"&gt;Genesis Studio- una IDE para AjGenesis&lt;/a&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;No todo lo tienen que hacer desde la línea de comando, o desde el NAnt/NAnt-GUI. El bueno de Jonathan Cisneros desarrolló esta herramienta WinForm, con sintaxis de color y muchas mejoras en la experiencia de usuario, que pueden bajar desde:&lt;/p&gt; &lt;p&gt;&lt;a title="http://www.codeplex.com/ajgenesisstudio" href="http://www.codeplex.com/ajgenesisstudio"&gt;http://www.codeplex.com/ajgenesisstudio&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;a title="Preservando c&amp;oacute;digo en AjGenesis" href="http://msmvps.com/blogs/lopez/archive/2007/11/11/preservando-c-243-digo-en-ajgenesis.aspx"&gt;Preservando código en AjGenesis&lt;/a&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Si necesitan generar código, pero luego modificarlo, pueden usar algunas capacidades de AjGenesis para delimitar qué parte regenerar y cuales conservan.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;a title="Code Generation as a Service" href="http://msmvps.com/blogs/lopez/archive/2008/04/03/code-generation-as-a-service.aspx"&gt;Code Generation as a Service&lt;/a&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;La última adición al AjGenesis: ahora pueden generar código usando una interfaz web. Esto permite que&amp;nbsp;ya sea en Internet, o desde la intranet de su empresa, puedan generar código controlado, que cumpla con los estándares que se hayan adoptado.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Más posts sobre AjGenesis en&lt;/p&gt; &lt;p&gt;&lt;a title="AjGenesis" href="http://msmvps.com/blogs/lopez/archive/tags/AjGenesis/default.aspx"&gt;AjGenesis&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Si necesitan pasarle información a alguien que no maneja el español, pueden probar con mis artículos en &amp;quot;Anglish&amp;quot; (Angel&amp;#39;s English):&lt;/p&gt; &lt;p&gt;&lt;a title="http://ajlopez.wordpress.com/category/ajgenesis" href="http://ajlopez.wordpress.com/category/ajgenesis"&gt;http://ajlopez.wordpress.com/category/ajgenesis&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Enlaces&lt;/h3&gt; &lt;p&gt;EL sitio sobre generación de código es&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.codegeneration.net"&gt;http://www.codegeneration.net&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Ahí encontraran comentarios, herramientas, preguntas frecuentes sobre generación de código en general. Tienen una base de datos de herramientas publicadas. Hay enlaces sobre generación de código para distintas tecnologías, como Java, .NET, PHP y también temas de MDA (Model-Driven Architecture).&lt;/p&gt; &lt;p&gt;Otros enlaces que tratamos en las charlas son:&lt;/p&gt; &lt;p&gt;&lt;a title="CodeSmith Tools - The best .NET template based source code" href="http://www.codesmithtools.com/"&gt;CodeSmith Tools&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a title="MyGeneration Software" href="http://www.mygenerationsoftware.com/"&gt;MyGeneration Software&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a title="AndroMDA.org - Home" href="http://www.andromda.org/"&gt;AndroMDA.org - Home&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Mantengo todo tipo de enlaces relativos a generación de código en&lt;/p&gt; &lt;p&gt;&lt;a href="http://del.icio.us/ajlopez/codegeneration"&gt;http://del.icio.us/ajlopez/codegeneration&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h3&gt;Lista de correo sobre generación de código&lt;/h3&gt; &lt;p&gt;Existe un Google Group que se puede consultar por email, en español, dedicado a la generación de código. Ahí, además de otros temas, se trata de generación de código con AjGenesis, la generación de templates. En los archivos del grupo se publican ejemplos armados por los miembros.&lt;/p&gt; &lt;p&gt;Pueden ver los mensajes y suscribirse, en:&lt;/p&gt; &lt;p&gt;&lt;a title="http://groups.google.com/group/codegeneration" href="http://groups.google.com/group/codegeneration"&gt;http://groups.google.com/group/codegeneration&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Conclusión&lt;/h3&gt; &lt;p&gt;Espero que quede claro que lo importante es usar generación de código como solución pragmática, pero basado en la abstracción de un modelo. Hacer el ejercicio de abstracción de generar un modelo adecuado para lo que necesitemos, es un &amp;quot;must&amp;quot; que me parece el primer paso para separarnos de los problemas de cambios en las tecnologías, herramientas y plataformas.&lt;/p&gt; &lt;p&gt;Luego, el modelo debe ser de libre definición. Y el texto o código generado, también: debe ser el tipo de texto o código que hubiéramos generado nosotros mismos. Finalmente, la herramienta de generación de código tiene que estar disponible en código totalmente abierto, para que se pueda extender, entender o usar de la forma que querramos.&lt;/p&gt; &lt;p&gt;Tengo que escribir más sobre la importancia del modelo, y que pueden hacer el suyo propio: no hay modelo fijo, pueden partir desde la base de datos, desde los archivos XML de los ejemplos, o desde donde quieran. También tengo que escribir sobre la posibilidad de hacer modelos que se deriven de otros modelos. Y escribir haciendo énfasis en que lo que construimos, en realidad, es un sistema experto. De ahí, que desde el principio, incorporé un lenguaje de programación que puede tomar decisiones, completar y modificar el modelo.&lt;/p&gt; &lt;p&gt;Como ven, con AjGenesis, ¡sky is the limit! :-)&lt;/p&gt; &lt;p&gt;Nos leemos!&lt;/p&gt; &lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1633619" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/PHP/default.aspx">PHP</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Arquitectura/default.aspx">Arquitectura</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Generaci_26002300_243_3B00_n+de+C_26002300_243_3B00_digo/default.aspx">Generaci&amp;#243;n de C&amp;#243;digo</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/NHibernate/default.aspx">NHibernate</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/C_26002300_243_3B00_digo+Abierto/default.aspx">C&amp;#243;digo Abierto</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/C+Sharp/default.aspx">C Sharp</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/VB.NET/default.aspx">VB.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/AjGenesis/default.aspx">AjGenesis</category></item><item><title>LINQ y Arquitectura de Capas</title><link>http://msmvps.com/blogs/lopez/archive/2008/03/12/linq-y-arquitectura-de-capas.aspx</link><pubDate>Wed, 12 Mar 2008 09:37:02 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1540848</guid><dc:creator>lopez</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1540848</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2008/03/12/linq-y-arquitectura-de-capas.aspx#comments</comments><description>&lt;p&gt;Gracias a&amp;nbsp;un email de &lt;a href="http://staff.southworks.net/pcostantini/" target="_blank"&gt;Pablo Constantini&lt;/a&gt; tengo&amp;nbsp;estos enlaces sobre el tema: ¿cómo encaja LINQ en una arquitectura de capas?&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Using Linq in a Multi-Tier ASP.NET application&lt;br /&gt;&lt;a href="http://eliasbland.wordpress.com/2008/02/08/a-pattern-for-using-linq-to-sql-in-a-multi-tier-environment/"&gt;http://eliasbland.wordpress.com/2008/02/08/a-pattern-for-using-linq-to-sql-in-a-multi-tier-environment/&lt;/a&gt; &lt;p&gt;LINQ to SQL and the &amp;quot;Request-scoped DataContext&amp;quot; Pattern&lt;br /&gt;&lt;a href="http://blogs.vertigo.com/personal/keithc/Blog/Lists/Posts/Post.aspx?ID=11"&gt;http://blogs.vertigo.com/personal/keithc/Blog/Lists/Posts/Post.aspx?ID=11&lt;/a&gt; &lt;p&gt;Enterprise Application Architecture with LINQ to SQL&lt;br /&gt;&lt;a href="http://www.codeproject.com/KB/architecture/EnterpriseApplicationArch.aspx"&gt;http://www.codeproject.com/KB/architecture/EnterpriseApplicationArch.aspx&lt;/a&gt; &lt;p&gt;Data Retrieval and CUD Operations in N-Tier Applications&lt;br /&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/bb546187.aspx"&gt;http://msdn2.microsoft.com/en-us/library/bb546187.aspx&lt;/a&gt; &lt;p&gt;Other resources&lt;br /&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/bb882661.aspx"&gt;http://msdn2.microsoft.com/en-us/library/bb882661.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.compiledmonkey.com/linq-in-an-n-tier-architecture"&gt;http://www.compiledmonkey.com/linq-in-an-n-tier-architecture&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Para mí, LINQ con SQL nos sirve para programar el acceso a datos. Las &amp;quot;entidades&amp;quot; que crea LINQ for SQL, por ejemplo, no son entidades de negocio: son clases para la capa de datos, prácticamente un mapeo directo de la estructura de tablas. En un capa superior, se pueden tomar objetos de esas clases y transformarlos, adaptarlos a lo que uno precisa. Claro, también está la opción de usarlos tal cual. Sólo habrá que ver el contexto de nuestra aplicación: si es un simple &amp;quot;mostrar datos de tablas&amp;quot; y actualizarlos, o si necesita una lógica de negocios y un modelo de dominio más complejo.&lt;/p&gt; &lt;p&gt;Nos leemos!&lt;/p&gt; &lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1540848" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Arquitectura/default.aspx">Arquitectura</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category></item><item><title>Guidance Share: de todo sobre seguridad, rendimiento y más</title><link>http://msmvps.com/blogs/lopez/archive/2008/02/03/guidance-share-de-todo-sobre-seguridad-rendimiento-y-m-225-s.aspx</link><pubDate>Sun, 03 Feb 2008 14:13:07 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1494023</guid><dc:creator>lopez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1494023</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2008/02/03/guidance-share-de-todo-sobre-seguridad-rendimiento-y-m-225-s.aspx#comments</comments><description>&lt;p&gt;El bueno de J.D. Meier, Program Manager en Pattern &amp;amp; Practices de Microsoft, ha armado un sitio estupendo, un wiki, para compartir su conocimiento y el de otros, sobre Ingenería de Software, orientada a tecnologías Microsoft, aunque creo que pueden ser de utilidad para otros ambientes y tecnologías.&lt;/p&gt; &lt;p&gt;Pueden visitar&lt;/p&gt; &lt;p align="center"&gt;&lt;a href="http://www.guidanceshare.com/wiki/Main_Page" target="_blank"&gt;Software Guidance Share&lt;/a&gt;&lt;/p&gt; &lt;p align="center"&gt;&lt;img src="http://www.ajlopez.com/images/articles/guidanceshare.png" alt="" /&gt; &lt;/p&gt; &lt;p&gt;Ahí encontrarán:&lt;/p&gt; &lt;p&gt;&lt;a&gt;&lt;/a&gt; &lt;h5&gt;&lt;a href="http://www.guidanceshare.com/wiki/Technology_Index"&gt;Tech Centers&lt;/a&gt;&lt;/h5&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.guidanceshare.com/wiki/Category:.NET_Framework_2.0"&gt;.NET Framework 2.0&lt;/a&gt; &amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Category:ADO.NET_2.0"&gt;ADO.NET 2.0&lt;/a&gt; &amp;nbsp;–&lt;a href="http://www.guidanceshare.com/wiki/Category:ASP.NET_2.0"&gt; ASP.NET 2.0&lt;/a&gt; &lt;li&gt;&lt;a href="http://www.guidanceshare.com/wiki/Category:.NET_Framework_1.1"&gt;.NET Framework 1.1&lt;/a&gt; &amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Category:ADO.NET_1.1"&gt;ADO.NET 1.1&lt;/a&gt; &amp;nbsp;–&lt;a href="http://www.guidanceshare.com/wiki/Category:ASP.NET_1.1"&gt; ASP.NET 1.1&lt;/a&gt; &amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Category:Code_Access_Security_%28.NET_1.1%29"&gt;Code Access Security (.NET 1.1)&lt;/a&gt; &amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Category:Enterprise_Services_%28.NET_1.1%29"&gt;Enterprise Services (.NET 1.1)&lt;/a&gt; &amp;nbsp;–&lt;a href="http://www.guidanceshare.com/wiki/Category:Interop_%28.NET_1.1%29"&gt; Interop (.NET 1.1)&lt;/a&gt; &amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Category:Remoting_%28.NET_1.1%29"&gt;Remoting (.NET 1.1)&lt;/a&gt; &amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Category:Web_Services_%28ASMX_1.1%29"&gt;Web Services (ASMX 1.1)&lt;/a&gt; &amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Category:XML_%28.NET_1.1%29"&gt;XML (.NET 1.1)&lt;/a&gt; &lt;li&gt;&lt;a href="http://www.guidanceshare.com/wiki/Category:SQL_Server_2000"&gt;SQL Server 2000&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a&gt;&lt;/a&gt; &lt;h5&gt;&lt;a href="http://www.guidanceshare.com/wiki/Performance"&gt;Performance&lt;/a&gt;&lt;/h5&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.guidanceshare.com/wiki/Performance_Engineering"&gt;Performance Engineering&lt;/a&gt; &amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Performance_Inspections"&gt;Performance Inspections&lt;/a&gt; &amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Performance_Modeling"&gt;Performance Modeling&lt;/a&gt; &lt;li&gt;&lt;a href="http://www.guidanceshare.com/wiki/Performance_At_a_Glance"&gt;At a Glance&lt;/a&gt; &amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Performance_Cheat_Sheets"&gt;Cheat Sheets&lt;/a&gt; &amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Performance_Checklists"&gt;Checklists&lt;/a&gt; &amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Performance_Explained"&gt;Explained&lt;/a&gt; &amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Performance_Guidelines"&gt;Guidelines&lt;/a&gt; &amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Performance_How_Tos"&gt;How Tos&lt;/a&gt; &amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Performance_Inspection_Questions"&gt;Inspection Questions&lt;/a&gt; &amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Performance_Methodologies"&gt;Methodologies&lt;/a&gt; &amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Performance_Practices"&gt;Practices&lt;/a&gt; &amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Performance_Principles"&gt;Principles&lt;/a&gt; &amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Performance_Techniques"&gt;Techniques&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a&gt;&lt;/a&gt; &lt;h5&gt;&lt;a href="http://www.guidanceshare.com/wiki/Security"&gt;Security&lt;/a&gt;&lt;/h5&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.guidanceshare.com/wiki/Security_Engineering"&gt;Security Engineering&lt;/a&gt; &amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Security_Inspections"&gt;Security Inspections&lt;/a&gt; &amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Threat_Modeling"&gt;Threat Modeling&lt;/a&gt; &lt;li&gt;&lt;a href="http://www.guidanceshare.com/wiki/Threats_and_Countermeasures"&gt;Threats and Countermeasures&lt;/a&gt; &amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Threats"&gt;Threats&lt;/a&gt; &amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Attacks"&gt;Attacks&lt;/a&gt; &amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Vulnerabilities"&gt;Vulnerabilities&lt;/a&gt; &amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Countermeasures"&gt;Countermeasures&lt;/a&gt; &lt;li&gt;&lt;a href="http://www.guidanceshare.com/wiki/Attack_Patterns"&gt;Attack Patterns&lt;/a&gt;&amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Vulnerability_Patterns"&gt;Vulnerability Patterns&lt;/a&gt;&amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Security_Design_Patterns"&gt;Security Design Patterns&lt;/a&gt; &amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Security_Implementation_Patterns"&gt;Security Implementation Patterns&lt;/a&gt; &lt;li&gt;&lt;a href="http://www.guidanceshare.com/wiki/Security_Application_Scenarios"&gt;Application Scenarios&lt;/a&gt; &amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Security_At_a_Glances"&gt;At a Glance&lt;/a&gt; &amp;nbsp;–&lt;a href="http://www.guidanceshare.com/wiki/Security_Cheat_Sheets"&gt; Cheat Sheets&lt;/a&gt; &amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Security_Checklists"&gt;Checklists&lt;/a&gt; &amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Security_Explained"&gt;Explained&lt;/a&gt; &amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Security_Guidelines"&gt;Guidelines&lt;/a&gt; &amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Security_How_Tos"&gt;How Tos&lt;/a&gt; &amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Security_Inspection_Questions"&gt;Inspection Questions&lt;/a&gt; &amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Security_Methodologies"&gt;Methodologies&lt;/a&gt; &amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Security_Practices"&gt;Practices&lt;/a&gt; &amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Security_Principles"&gt;Principles&lt;/a&gt; &amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Security_Questions_and_Answers"&gt;Questions and Answers&lt;/a&gt; &amp;nbsp;–&lt;a href="http://www.guidanceshare.com/wiki/Security_Techniques"&gt; Techniques&lt;/a&gt; &amp;nbsp;– &lt;a href="http://www.guidanceshare.com/wiki/Security_Templates"&gt;Templates&lt;/a&gt; &amp;nbsp;–&lt;a href="http://www.guidanceshare.com/wiki/Security_Walkthroughs"&gt; Walkthroughs&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Excelente, Meier, cumpliendo con el &amp;quot;mindset&amp;quot; Don&amp;#39;t be a canuto.&lt;/p&gt; &lt;p&gt;Gracias al &lt;a href="http://staff.southworks.net/blogs/matiaswoloski" target="_blank"&gt;&amp;quot;Pibe Woloski&amp;quot;&lt;/a&gt;, gran comedor de cangrejos, por aportar este enlace.&lt;/p&gt; &lt;p&gt;Nos leemos!&lt;/p&gt; &lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1494023" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Arquitectura/default.aspx">Arquitectura</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Cursos/default.aspx">Cursos</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Ingenier_26002300_237_3B00_a+de+Software/default.aspx">Ingenier&amp;#237;a de Software</category></item><item><title>The making of LitwareHR</title><link>http://msmvps.com/blogs/lopez/archive/2007/12/23/the-making-of-litwarehr.aspx</link><pubDate>Sun, 23 Dec 2007 15:20:52 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1414126</guid><dc:creator>lopez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1414126</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2007/12/23/the-making-of-litwarehr.aspx#comments</comments><description>&lt;p&gt;&lt;img height="237" src="http://www.ajlopez.com/images/articles/litware01.jpg" width="284" align="left" alt="" /&gt;&lt;/p&gt; &lt;p align="center"&gt;&lt;img height="235" src="http://www.ajlopez.com/images/articles/litware02.jpg" width="278" alt="" /&gt;&lt;/p&gt; &lt;p&gt;El año pasado participé del desarrollo de LitwareHR, una aplicación &lt;a href="http://en.wikipedia.org/wiki/Software_as_a_Service" target="_blank"&gt;Software as a Service&lt;/a&gt; de referencia de Microsoft. Trabajé en un equipo de &lt;a href="http://www.southworks.net" target="_blank"&gt;Southworks&lt;/a&gt;, en un proceso tipo SCRUM. Al final del proyecto se filmó un video para mostrar algunas ideas del proyecto.&lt;/p&gt; &lt;p&gt;Pueden ver el video en&lt;/p&gt; &lt;p&gt;&lt;a href="http://video.msn.com/video.aspx?mkt=en-us&amp;amp;vid=d1021732-a3d0-442e-a52f-79f0c84095cd" target="_blank"&gt;MSN Video - The making of LitwareHR&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Las estrellas son &lt;a href="http://blogs.msdn.com/gianpaolo/"&gt;Gianpaolo Carraro&lt;/a&gt; y &lt;a href="http://blogs.msdn.com/fred_chong/" target="_blank"&gt;Fred Chong&lt;/a&gt;, de Microsoft. En la captura de arriba a la derecha, podemos ver algunos de los miembros del team:&lt;/p&gt; &lt;p&gt;&lt;a href="http://staff.southworks.net/blogs/ezequielm/" target="_blank"&gt;Ezequiel Morito&lt;/a&gt;&lt;br /&gt;&lt;a href="http://staff.southworks.net/ebella/" target="_blank"&gt;Ezequiel Bella&lt;/a&gt;&lt;br /&gt;&lt;a href="http://staff.southworks.net/blogs/matiaswoloski" target="_blank"&gt;Matías Woloski&lt;/a&gt;&lt;br /&gt;&lt;a href="http://staff.southworks.net/ariel" target="_blank"&gt;Ariel Schapiro&lt;/a&gt;&lt;br /&gt;&lt;a href="http://staff.southworks.net/alejack" target="_blank"&gt;Alejandro Jack&lt;/a&gt; (el que está vestido de muñequito de torta....;-). Hace unas semanas, el bueno de Alejandro se aprobó el examen de Arquitecto certificado en Microsoft. Es el tercer arquitecto de Latinoamérica, y el número 99 en el mundo.&lt;/p&gt; &lt;p&gt;En el video, tengo una mínima intervención, pero ya saben: no hay papeles chicos para un actor grande ... ;-)&lt;/p&gt; &lt;p&gt;Nos leemos!&lt;/p&gt; &lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1414126" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Arquitectura/default.aspx">Arquitectura</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Scrum/default.aspx">Scrum</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Software+as+a+Service/default.aspx">Software as a Service</category></item><item><title>Strategic Architect Forum en Microsoft</title><link>http://msmvps.com/blogs/lopez/archive/2007/12/18/strategic-architect-forum-en-microsoft.aspx</link><pubDate>Tue, 18 Dec 2007 10:07:51 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1403184</guid><dc:creator>lopez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1403184</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2007/12/18/strategic-architect-forum-en-microsoft.aspx#comments</comments><description>&lt;p&gt;El bueno de &lt;a href="http://www.thearchitectexchange.com/" target="_blank"&gt;Arvindra Sehmi&lt;/a&gt; nos avisa del material publicado del último Strategic Architect Forum de Microsoft:&lt;/p&gt; &lt;p&gt;&lt;a title="bb267380.aspx" href="http://msdn2.microsoft.com/en-gb/architecture/bb267380.aspx"&gt;SAF 2007&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Transcribo acá:&lt;/p&gt; &lt;h5&gt;Day 1&lt;/h5&gt; &lt;p&gt;&lt;strong&gt;Changing the World with Software and Services&lt;/strong&gt; &lt;p&gt;&lt;em&gt;Dr. Donald Ferguson&lt;/em&gt; (Microsoft) &lt;p&gt;&lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/1%20Changing%20the%20World%20with%20Software%20Services.zip"&gt;[Video]&lt;/a&gt; . &lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/Guest_Ferguson_11122007_SAF.zip"&gt;[Slides]&lt;/a&gt; . &lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/SAF%2007%20Don%20Ferguson-Changing%20the%20World%20with%20Software%20and%20Services.docx"&gt;[Transcript]&lt;/a&gt; &lt;p&gt;&lt;strong&gt;Project Astoria: Data Services for the Web&lt;/strong&gt; &lt;p&gt;&lt;em&gt;Pablo Castro&lt;/em&gt; (Microsoft) &lt;p&gt;&lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/2%20Project%20Astoria,%20Data%20Services%20for%20the%20Web.zip"&gt;[Video]&lt;/a&gt; . &lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/Castro_11122007_SAF.zip"&gt;[Slides]&lt;/a&gt; . &lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/SAF%2007%20Pablo%20Castro-Project%20Astoria.docx"&gt;[Transcript]&lt;/a&gt; &lt;p&gt;&lt;strong&gt;Anatomy of An S+S Application&lt;/strong&gt; &lt;p&gt;&lt;em&gt;Eugenio Pace&lt;/em&gt; (Microsoft) &lt;p&gt;&lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/3%20Anatomy%20of%20an%20S%20plus%20S%20Application.zip"&gt;[Video]&lt;/a&gt; . &lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/Pace_11122007_SAF.zip"&gt;[Slides]&lt;/a&gt; . &lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/SAF%2007%20Eugenio%20Pace%20Anatomy%20of%20an%20S-S%20Line%20of%20Business%20Application.docx"&gt;[Transcript]&lt;/a&gt; &lt;p&gt;&lt;strong&gt;Unified Communications: Breaking VoIP Barriers&lt;/strong&gt; &lt;p&gt;&lt;em&gt;Gurdeep Pall&lt;/em&gt; (Microsoft) &lt;p&gt;&lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/4%20Unified%20Communications.zip"&gt;[Video]&lt;/a&gt; . &lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/Gurdeep_11122007_SAF.zip"&gt;[Slides]&lt;/a&gt; . &lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/SAF%2007%20Gurdeep%20Singh%20Pall-Breaking%20VoIP%20Barriers-The%20Unified%20Communications%20Portfolio.docx"&gt;[Transcript]&lt;/a&gt; &lt;p&gt;&lt;strong&gt;Composite Application Architectures Using the 2007 Office System&lt;/strong&gt; &lt;p&gt;&lt;em&gt;Scott Jamison&lt;/em&gt; (Microsoft) &lt;p&gt;&lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/5%20Composite%20Application%20Architectures.zip"&gt;[Video]&lt;/a&gt; . &lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/Jamison_11122007_SAF.zip"&gt;[Slides]&lt;/a&gt; . &lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/SAF%2007%20Scott%20Jamison-Composite%20Application%20Architectures.docx"&gt;[Transcript]&lt;/a&gt; &lt;p&gt;&lt;strong&gt;A Data-driven Approach To Distributed, Concurrent Software&lt;/strong&gt; &lt;p&gt;&lt;em&gt;George Chrysanthakopoulos&lt;/em&gt; (Microsoft) &lt;p&gt;&lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/1%20A%20Data-driven%20Approach%20to%20Distributed%20Concurrent%20Software.zip"&gt;[Video]&lt;/a&gt; . &lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/Chrysanthakopoulos_11122007_SAF.zip"&gt;[Slides]&lt;/a&gt; . &lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/SAF%2007%20George%20Chrisanthakopoulos%20and%20Henrik%20Frystyk%20Nielsen-A%20Data-Driven%20(REST)%20Approach%20to%20Distributed,%20Concurrent%20Software%20In%20the%20Enterprise.docx"&gt;[Transcript]&lt;/a&gt; &lt;p&gt;&amp;nbsp; &lt;h5&gt;Day 2&lt;/h5&gt; &lt;p&gt;&lt;strong&gt;A Look Into Microsoft Research&lt;/strong&gt; &lt;p&gt;&lt;em&gt;Behrooz Chitsaz&lt;/em&gt; (Microsoft) &lt;p&gt;&lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/7%20A%20look%20into%20Microsoft%20Research.zip"&gt;[Video]&lt;/a&gt; . &lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/Chitsaz_11132007_SAF.zip"&gt;[Slides]&lt;/a&gt; . &lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/SAF%2007%20Behrooz%20Chitsaz-A%20Look%20into%20Microsoft%20Research.docx"&gt;[Transcript]&lt;/a&gt; &lt;p&gt;&lt;strong&gt;Claims-Based Identity Layer For The &amp;quot;New Internet&amp;quot;&lt;/strong&gt; &lt;p&gt;&lt;em&gt;Slava Kavsan&lt;/em&gt; (Microsoft) &lt;p&gt;&lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/8%20Claims-Based%20Identity%20Layer%20For%20The%20New%20Internet.zip"&gt;[Video]&lt;/a&gt; . &lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/Kavsan_11132007_SAF.zip"&gt;[Slides]&lt;/a&gt; . &lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/SAF%2007%20Slava%20Kavsan-Claims-Based%20Identify%20Layer%20for%20the%20New%20Internet.docx"&gt;[Transcript]&lt;/a&gt; &lt;p&gt;&lt;strong&gt;The Reality Of The Cloud And The Future Of The Datacenter&lt;/strong&gt; &lt;p&gt;&lt;em&gt;Debra Chrapaty&lt;/em&gt; (Microsoft) &lt;p&gt;&lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/9%20The%20Reality%20Of%20The%20Cloud%20And%20The%20Future%20Of%20The%20Datacenter.zip"&gt;[Video]&lt;/a&gt; . &lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/Chrapaty_11132007_SAF.zip"&gt;[Slides]&lt;/a&gt; . &lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/SAF%2007%20Debra%20Chrapaty-The%20Reality%20of%20the%20Cloud%20and%20the%20Future%20of%20the%20Data%20Center.docx"&gt;[Transcript]&lt;/a&gt; &lt;p&gt;&lt;strong&gt;Mining Lightning For The Cloud&lt;/strong&gt; &lt;p&gt;&lt;em&gt;John Dwyer&lt;/em&gt; (Microsoft) &lt;p&gt;&lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/10%20Mining%20Lighting%20for%20the%20Cloud.zip"&gt;[Video]&lt;/a&gt; . &lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/Dwyer_11132007_SAF.zip"&gt;[Slides]&lt;/a&gt; . &lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/SAF%2007%20John%20Dwyer-Mining%20Lightning%20for%20the%20Cloud.docx"&gt;[Transcript]&lt;/a&gt; &lt;p&gt;&lt;strong&gt;User Experience for Architects&lt;/strong&gt; &lt;p&gt;&lt;em&gt;Simon Guest&lt;/em&gt; (Microsoft) &lt;p&gt;&lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/11%20User%20Experience%20for%20Architects.zip"&gt;[Video]&lt;/a&gt; . &lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/Guest_Intro_11132007_SAF.zip"&gt;[Slides]&lt;/a&gt; . &lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/SAF%2007%20Simon%20Guest-User%20Experience%20for%20Architects.docx"&gt;[Transcript]&lt;/a&gt; &lt;p&gt;&lt;strong&gt;Windows Live Platform: Making Better End User Experiences&lt;/strong&gt; &lt;p&gt;&lt;em&gt;David Dumler&lt;/em&gt; (Microsoft)&lt;br /&gt;&lt;em&gt;Angus Logan&lt;/em&gt; (Microsoft) &lt;p&gt;&lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/3%20Windows%20Live%20Platform.zip"&gt;[Video]&lt;/a&gt; . &lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/Dumler_11132007_SAF.zip"&gt;[Slides]&lt;/a&gt; . &lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/SAF%2007%20David%20Dumler%20and%20Angus%20Logan-Windows%20Live%20Platform-Making%20Better%20End%20User%20Experiences.docx"&gt;[Transcript]&lt;/a&gt; &lt;p&gt;&lt;strong&gt;Duet: An Enterprise S+S Offering From Microsoft And SAP&lt;/strong&gt; &lt;p&gt;&lt;em&gt;Chris Keyser&lt;/em&gt; (Microsoft)&lt;br /&gt;&lt;em&gt;Burra Gopal&lt;/em&gt; (Microsoft)&lt;br /&gt;&lt;em&gt;Adi Kavaler&lt;/em&gt; (SAP) &lt;p&gt;&lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/4%20An%20Enterprise%20S%20plus%20S%20Offering%20From%20Microsoft%20And%20SAP.zip"&gt;[Video]&lt;/a&gt; . &lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/Keyser_11132007_SAF.zip"&gt;[Slides]&lt;/a&gt; . &lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/SAF%2007%20Chris%20Keyser%20and%20Adi%20Kavaler-Duet-An%20Enterprise%20S%20S%20Offering%20from%20Microsoft%20and%20SAP.docx"&gt;[Transcript]&lt;/a&gt; &lt;p&gt;&lt;strong&gt;Dynamic IT&lt;/strong&gt; &lt;p&gt;&lt;em&gt;Neil Leslie&lt;/em&gt; (Microsoft)&lt;br /&gt;&lt;em&gt;Barry Briggs&lt;/em&gt; (Microsoft) &lt;p&gt;&lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/5%20Dynamic%20IT.zip"&gt;[Video]&lt;/a&gt; . &lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/Leslie_11132007_SAF.zip"&gt;[Slides]&lt;/a&gt; . &lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/SAF%2007%20Barry%20Briggs%20and%20Neil%20Leslie-Customer%20Data%20At%20Microsoft.docx"&gt;[Transcript]&lt;/a&gt; &lt;p&gt;&lt;strong&gt;Amazon.com&amp;#39;s Simple Storage Service, Elastic Compute Cloud, and Simple Queue Service&lt;/strong&gt; &lt;p&gt;&lt;em&gt;Charlie Bell&lt;/em&gt; (Amazon) &lt;p&gt;&lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/6%20Amazon.zip"&gt;[Video]&lt;/a&gt; . &lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/Guest_11132007_SAF.zip"&gt;[Slides]&lt;/a&gt; . &lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/SAF%2007%20Charlie%20Bell-Amazon.com&amp;#39;s%20Simple%20Storage%20Service,%20Elastic%20Compute%20Cloud%20and%20Simple%20Queue%20Service.docx"&gt;[Transcript]&lt;/a&gt; &lt;p&gt;&amp;nbsp; &lt;h5&gt;Day 3&lt;/h5&gt; &lt;p&gt;&lt;strong&gt;Lessons Learned from the Web&amp;#39;s Edge: MySpace&lt;/strong&gt; &lt;p&gt;&lt;em&gt;Aber Whitcomb&lt;/em&gt; (MySpace)&lt;br /&gt;&lt;em&gt;Jim Benedetto&lt;/em&gt; (MySpace) &lt;p&gt;&lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/12%20MySpace.zip"&gt;[Video]&lt;/a&gt; . &lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/Whitcomb_11142007_SAF.zip"&gt;[Slides]&lt;/a&gt; . &lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/SAF%2007%20Aber%20Whitcomb%20and%20JimBenedetto-Lessons%20Learned%20from%20the%20Web.docx"&gt;[Transcript]&lt;/a&gt; &lt;p&gt;&lt;strong&gt;Leading Geeks: How to Manage and Lead People Who Deliver Technology&lt;/strong&gt; &lt;p&gt;&lt;em&gt;Paul Glen&lt;/em&gt; (C2 Consulting) &lt;p&gt;&lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/13%20Leading%20Geeks.zip"&gt;[Video]&lt;/a&gt; . &lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/Glen_11142007_SAF.zip"&gt;[Slides]&lt;/a&gt; . &lt;a href="http://download.microsoft.com/download/1/5/4/154c3243-7777-45e5-abf3-cd5adb893a63/SAF%2007%20Paul%20Glen-Leading%20Geeks-How%20to%20Manage%20and%20Lead%20People%20Who%20Deliver%20Technology.docx"&gt;[Transcript]&lt;/a&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;Para lo que estoy estudiando y escribiendo, de Grid Computing, son para recomandar la presentación de Amazon,&amp;nbsp;y la del bueno de George Chrysanthakopoulus, el creador del &lt;a href="http://msdn.microsoft.com/msdnmag/issues/06/09/ConcurrentAffairs/default.aspx" target="_blank"&gt;Concurrency and Coordination Runtime&lt;/a&gt;. &lt;p&gt;Vean la presencia de dos argentinos, &lt;a href="http://blogs.msdn.com/eugeniop/" target="_blank"&gt;Eugenio Pace&lt;/a&gt;, y &lt;a href="http://blogs.msdn.com/pablo/" target="_blank"&gt;Pablo Castro&lt;/a&gt;. Eugenio, ahora, luego de Patterns and Practices abocado a Software + Service. Pablo, luego de ADO.NET, ahora metido de lleno en el proyecto Astoria. &lt;p&gt;Tengo que leer sobre Microsoft Reseach, y otras transcripciones, todos temas interesantes. Muy bueno que tengan los videos y transcripciones disponibles. &lt;p&gt;Nos leemos! &lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1403184" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Arquitectura/default.aspx">Arquitectura</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category></item><item><title>Lo que se necesita para el éxito según Bill Gates</title><link>http://msmvps.com/blogs/lopez/archive/2007/12/16/lo-que-se-necesita-para-el-233-xito-seg-250-n-bill-gates.aspx</link><pubDate>Sun, 16 Dec 2007 15:17:32 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1400366</guid><dc:creator>lopez</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1400366</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2007/12/16/lo-que-se-necesita-para-el-233-xito-seg-250-n-bill-gates.aspx#comments</comments><description>&lt;p&gt;&lt;img style="margin:0px 20px 20px 0px;" src="http://www.ajlopez.com/images/articles/gates.jpg" align="left" alt="" /&gt; El bueno de &lt;a href="http://staff.southworks.net/johnny" target="_blank"&gt;Johnny Halife&lt;/a&gt; (una de las cualidades para merecer lo de &amp;quot;el bueno de&amp;quot; es no ser un canuto, no guardarse información y conocimiento, sino compartirlo), me avisa de un artículo de William H. Gates III:&lt;/p&gt; &lt;p&gt;&lt;a href="http://news.bbc.co.uk/2/hi/business/7142073.stm" target="_blank"&gt;Bill Gates: The skills you need to succeed&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Es un interesante artículo, comentemos acá algunos puntos:&lt;/p&gt; &lt;p&gt;Gates afirma, con razón, que el software ha influido en cada actividad humana. Desde el arte hasta la ciencia, el software, y en los últimos años, Internet (como gran combinación de software y hardware) ha cambiado, según mi punto de vista, la historia humana. Hoy una parte de la humanidad (sólo una parte, no olvidarse) se beneficia de lo que ha sido la revolución del software de las últimas décadas. Cuando yo era infante, hace tiempo, en el siglo pasado, se pensaba en la era espacial como el futuro, lo que iba a cambiar nuestras vidas. Resultó que fue el software. Si la era espacial hubiera avanzado tanto como avanzó el software, hoy estaría escribiendo esto desde algun cráter lunar.&lt;/p&gt; &lt;p&gt;Me gusta la frase de Gates&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;I don&amp;#39;t think you can overemphasise the importance of having a good background in maths and science. &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Exacto. El conocimiento de ciencias duras como matemáticas, y ciencia en general, es importante en un desarrollador de software. Un espíritu inquieto, pensamiento crítico, ganas de conocer y experimentar, son también otras cualidades.&lt;/p&gt; &lt;p&gt;Veamos estos párrafos:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Communication skills and the ability to work well with different types of people are very important too. &lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;A lot of people assume that creating software is purely a solitary activity where you sit in an office with the door closed all day and write lots of code. &lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;This isn&amp;#39;t true at all. &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Gates menciona que ya no estamos solos, escribiendo software. La capacidad de comunicarse con otros es esencial. Hoy la creación de software ya no es una actividad solitaria. Para cualquier cosa no trivial, necesitamos saber transmitir nuestras ideas, motivar a gente, trabajar con otros, integrar y liderar grupos, expresar lo que pensamos y diseñamos y conocemos y opinamos. &lt;p&gt;Si Ud., como desarrollador, es un lobo solitario y huraño, no conseguirá los mismos logros que otros que saben comunicarse, aunque sus capacidades técnicas sean superiores. &lt;p&gt;Sigamos: &lt;blockquote&gt; &lt;p&gt;I also place a high value on having a passion for ongoing learning. When I was pretty young, I picked up the habit of reading lots of books.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Gates es un tipo inteligente. Afirma que se necesita educación continua. Desde que era joven, lee montones de libros. Gates lee desde historia hasta ciencia hasta todo lo que le interesa. En su tiempo, reservaba dos veces por año una semana&amp;nbsp;para explorar un tema nuevo, como irse a una isla, con los libros de Richard Feynman para entender algun tema de física. &lt;p&gt;Hoy, el software está en todas partes. Y para crearlo, el conocimiento abarcativo de otras ramas del conocimiento es en algún momento necesario. Conocer de otros temas, aunque sea a nivel básico, nos permite tener una mayor visión de cualquier cosa que encaremos. Si quiere ser desarrollador, diseñador, arquitecto de software, una amplitud de intereses le dará una capacidad de abstracción, reconocimiento de patrones, creatividad, relación de temas diferentes, que le ayudará en su tarea. Hasta puedo exagerar un poco: un desarrollador de software es un ser humano renacentista, interesado por todo. Hoy, Leonardo Da Vinci, sería software developer... ;-) &lt;p&gt;Volviendo a los libros: por algo llevo a todos lados la bolsa llena de mi librería preferida Cúspide.... :-) &lt;p&gt;Y ahora, Ud., ¿qué comunicó últimamente? ¿qué escribió en su blog? ¿qué conocimiento compartió? ¿qué ha leído y aprendido este año? &lt;p&gt;Nos leemos! &lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1400366" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/Arquitectura/default.aspx">Arquitectura</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category></item><item><title>Escribiendo un documento de arquitectura</title><link>http://msmvps.com/blogs/lopez/archive/2007/11/05/escribiendo-un-documento-de-arquitectura.aspx</link><pubDate>Mon, 05 Nov 2007 09:59:51 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1283628</guid><dc:creator>lopez</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1283628</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2007/11/05/escribiendo-un-documento-de-arquitectura.aspx#comments</comments><description>&lt;p&gt;El bueno de Federico Jack me envió este enlace, que me parece estupendo para analizar, sobre las características que debe tener un documento de arquitectura de un sistema:&lt;/p&gt; &lt;p&gt;&lt;a href="http://stal.blogspot.com/2006/03/what-should-be-in-architecture.html"&gt;http://stal.blogspot.com/2006/03/what-should-be-in-architecture.html&lt;/a&gt;&lt;/p&gt; &lt;p&gt;En su blog, Michael, de Bavaria, escribe sobre varios temas, entre ellos, la arquitectura de software. Repasemos algunos de los puntos y detalles&amp;nbsp;que menciona (me hubiera gustado tener esta lista desde hace tiempo), con modificaciones y agregados personales míos:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Describa la arquitectura de arriba a abajo: presente la visión general primero, y luego vaya tratando cada uno de los puntos más en detalle, ya sea de diseño o implementación.  &lt;li&gt;Agregue un glosario: algo que podemos olvidar, pero muchos términos serán desconocidos o confusos, o peor, serán mal entendidos por alguien que tenga un contexto distinto al nuestro.  &lt;li&gt;Cada vez que introduzca un término que se conoce por una sigla, no presuma que todo el mundo sabe qué significa: coloque la sigla, y las palabras completas que describe.  &lt;li&gt;Que no exceda las 50 páginas: si es más extenso, no será leído en detalle. Recuerde que muchas personas que lo lean serán personas con cargos de responsabilidad, que pueden no tener todo el tiempo del mundo para leer su obra maestra.  &lt;li&gt;Todos los documentos de arquitectura que entregue, deben usar la misma plantilla: distintos tipos de letras y formatos entre documentos, confunden a los lectores. La estructura debe ser la misma para todos: si usa una tabla de contenido, un resumen, una conclusión en un documento, deberá usarse en todos.  &lt;li&gt;Si usa diagramas, úselos consistentemente. Si para explicar un concepto usa UML, cuando tenga que exponer un concepto similar siga con ese tipo de diagrama. Y use los mismos elementos: si en un diagrama UML usó algunos estereotipos, siga usándolos cuando sean necesarios, con las mismas notaciones e íconos.  &lt;li&gt;Agregue referencias a otros documentos que pueden ser importantes para entender algún concepto o explicitar una fuente consultada.  &lt;li&gt;Explique siempre cómo la arquitectura descripta cumple con los requerimientos que se quieren alcanzar. Debe haber una trazabilidad desde los requerimientos a la arquitectura definida.  &lt;li&gt;Coloque al comienzo un&amp;nbsp;resumen: sea gentil con el lector, prepárelo para lo que va a encontrar. Por lo mismo, si un documento lleva varias páginas y abarca varios temas, incluya un índice. Si es necesario, describa los prerrequisitos que debe cumplir de antemano un lector que quiera entender el documento.  &lt;li&gt;Si tiene que entregar varios documentos, estructure el conjunto como un árbol. El documento raíz describirá la arquitectura desde un punto de vista alto, estratégico. Desde ahí, los documentos nodos hijo irán explicando los subsistemas relevantes, y los elementos que atraviesan los demás, como seguridad y escalabilidad.  &lt;li&gt;Describa la especificación de la arquitectura, y cómo esa especificación puede ponerse a prueba, como cuando programamos &amp;quot;unit tests&amp;quot;.  &lt;li&gt;Compruebe que el documento acompañe, describa la implementación actual del sistema. Sino, será una pérdida de tiempo para quien lo lee, y hasta puede provocar&amp;nbsp;errores, al tomar decisiones sobre una especificación que no corresponda con el producto actual.  &lt;li&gt;Describa las decisiones de diseño en detalle, que no quede solamente la descripción de la decisión tomada, debe quedar claro que hubo una decisión en ese punto, por ejemplo, mencionando alguna alternativa.  &lt;li&gt;Relacionado con lo anterior, no sólo describa el &amp;quot;cómo&amp;quot; sino también el &amp;quot;por qué&amp;quot;. Es importante que otra persona entienda las razones que llevaron a tomar un camino en el diseño.  &lt;li&gt;Si se refiere a algún software entregado con el documento, o a utilizar, incluya la versión del mismo: no presuma que será evidente cuál es la versión a la que se refiere.  &lt;li&gt;Agregue diagramas y dibujos para explicar las decisiones de diseño tomadas. Los diagramas llevan tiempo de armado, pero el resultado vale la pena.  &lt;li&gt;Explique los diagramas: una imagen vale más que mil palabras, pero también hay que entenderla.  &lt;li&gt;Pida que otras personas revisen el documento. Uno siempre escribe desde su propio contexto, y tal vez lo que a nosotros nos parece claro, para otro no lo sea. Trate que sea una persona que no esté en el mismo proyecto, para probar si el documento es entendible para alguien que no está al tanto de los conceptos tratados.  &lt;li&gt;Use un sistema de control de versiones: no pierda la historia del documento.  &lt;li&gt;Escriba los nombres del autor o autores, y forma de contactarlos, en caso de ser necesario. Incluya fecha y hora de versión.  &lt;li&gt;No tiene que escribir todo el documento desde el principio al fin: vaya utilizando otros documentos menores que haya producido durante el proceso de discusión y diseño de arquitectura, pero asegúrese su consistencia. Recuerde: ¿cómo se come uno un elefante? Bocado a bocado.  &lt;li&gt;No necesita explicar el sentido de cada patrón usado: remita su descripción a la literatura especializada.  &lt;li&gt;Como en todo documento, sea consistente en el uso de los tiempos verbales, el uso o no de la forma pasiva, la forma de usar pronombres, si &amp;quot;dialoga&amp;quot; o no con el lector, el uso de la primera o tercera persona.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;¿Se les ocurre algo más?&amp;nbsp;¿Comentarios, correciones, críticas?&lt;/p&gt; &lt;p&gt;Nos leemos!&lt;/p&gt; &lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1283628" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/Arquitectura/default.aspx">Arquitectura</category></item><item><title>Reunión de Generación de Sistemas con AjGenesis</title><link>http://msmvps.com/blogs/lopez/archive/2007/09/03/reuni-243-n-de-generaci-243-n-de-sistemas-con-ajgenesis.aspx</link><pubDate>Mon, 03 Sep 2007 11:16:33 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1160666</guid><dc:creator>lopez</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1160666</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2007/09/03/reuni-243-n-de-generaci-243-n-de-sistemas-con-ajgenesis.aspx#comments</comments><description>&lt;p&gt;Ya había anunciado que el viernes pasado había &lt;a href="http://msmvps.com/blogs/lopez/archive/2007/08/16/desayuno-de-arquitectura-con-ajgenesis.aspx" target="_blank"&gt;desayuno de arquitectura&lt;/a&gt;, en el &lt;a href="http://www.mug.org.ar/"&gt;Microsoft User Group de Argentina&lt;/a&gt;. Agradezco desde acá a la gente del MUG por haberme dado la oportunidad de presentar este proyecto, y las ideas que me llevaron a implementarlo.&lt;/p&gt; &lt;p&gt;La reunión comenzó a las 9 horas y monedas, y seguimos casi hasta las 12hs, hubo charla informal post reunión, muy interesante.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.ajlopez.net/ReferenciaVe.php?Id=209"&gt;Material del Desayuno de Arquitectura sobre AjGenesis&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Para los que no conozcan sobre &lt;a href="http://www.ajlopez.com/ajgenesis" target="_blank"&gt;AjGenesis&lt;/a&gt;, mi &amp;quot;pet project&amp;quot; de generación de código, leer alguno de los &amp;quot;post&amp;quot;:&lt;/p&gt; &lt;p&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/2007/06/25/generando-aplicaciones-con-ajgenesis.aspx"&gt;Generación de aplicaciones con AjGenesis&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/2006/11/19/generando-c-digo-hello-world-con-ajgenesis.aspx"&gt;Generando código: Hello World con AjGenesis&lt;/a&gt;  &lt;h3&gt;Presentación&lt;/h3&gt; &lt;p&gt;Pueden bajarse del material de la reunión, la presentación que usé, ya usada en una reunión del año pasado. Esta vez, usé los primeros puntos de esa presentación, y varios de los puntos ya escritos en&lt;/p&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/2007/08/02/sobre-la-generaci-243-n-de-c-243-digo.aspx"&gt;Sobre la generación de código&lt;/a&gt;&lt;br /&gt; &lt;p&gt;Así que acá agregaré algunos puntos adicionales, que no había pasado por escrito:&lt;/p&gt; &lt;p&gt;. &lt;strong&gt;La adopción de una variante del AjBasic como lenguaje de templates&lt;/strong&gt;: motivada por la necesidad de tener un lenguaje de programación, no solamente una forma de expandir variables dentro de un template, o ejecutar algún for each sobre una lista de objetos del modelo. Creo que fue una buena elección, y siempre queda abierta la posibilidad de usar otro lenguaje para los templates. Con AjBasic tengo la posibilidad de tratar el modelo como un grafo de objetos (no solo como un árbol, como sería si trabajara con XML solamente), modificable, competable (puedo tomar decisiones y agregar elementos al modelo). Pequeñas cosas como&lt;/p&gt; &lt;p&gt;&lt;font face="Consolas" size="3"&gt;if not Project.Title then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Project.Title = Project.Name&lt;br /&gt;&lt;/font&gt;&lt;font face="Consolas" size="3"&gt;end if&lt;/font&gt;&lt;/p&gt; &lt;p&gt;o compleciones del modelo como&lt;/p&gt;&lt;font face="Consolas" size="3"&gt;if Entity.Reference then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Entity.Reference = GetEntity(Entity.Reference)&lt;br /&gt;&lt;/font&gt;&lt;font face="Consolas" size="3"&gt;end if&lt;/font&gt;  &lt;p&gt;(donde Entity.Reference inicialmente tiene solo el NOMBRE de la entidad referida, y luego lo reemplazo por la entidad completa, para armar un grafo de objetos, desde un árbol inicial de objetos).&lt;/p&gt; &lt;p&gt;son posibles al haber elegido ese camino.&lt;/p&gt; &lt;p&gt;- &lt;strong&gt;El modelo libre&lt;/strong&gt;:&amp;nbsp;mostré el ejemplo del Hello World, y cómo desde ese modelo se puede generar código o artefactos de texto, llamada desde consola, la ejecución de pequeñas tareas en AjBasic, y la integración con NAnt.&lt;/p&gt; &lt;p&gt;- &lt;strong&gt;Ejemplos de modelos y templates&lt;/strong&gt;: me basé en lo que ya estaba escrito en &lt;a href="http://www.ajlopez.com/downloads/AjGenesisExamples3.zip"&gt;AjGenesisExamples3.zip&lt;/a&gt; y &lt;a href="http://msmvps.com/blogs/lopez/archive/2007/06/25/generando-aplicaciones-con-ajgenesis.aspx"&gt;Generación de aplicaciones con AjGenesis&lt;/a&gt; donde se muestra un ejemplo. No es que AjGenesis se base sobre &amp;quot;ese modelo&amp;quot;, sólo son ejemplos de distintos proyectos, sobre el mismo modelo, que se concentra en representar entidades, y templates que generan Java, Java con Hibernate, VB.NET 1/2, CSharp 1/2, business entities, o implementaciones con conceptos de Domain-Driven Desing.&lt;/p&gt; &lt;p&gt;- &lt;strong&gt;Uso de XML para describir el modelo&lt;/strong&gt;: usando un XML libre, no sujeto a un esquema, que no &amp;quot;duela los ojos&amp;quot; leerlo, nos permite ir agregando elementos al modelo, sin tener que modificar una base de datos, o cambiando un esquema con el que hay que cumplir a rajatabla. Creo que ha sido una decisión que ha permitido que cada uno experimente con distintos modelos, rápidamente. Más sobre el tema más adelante en este post.&lt;/p&gt; &lt;p&gt;- &lt;strong&gt;Prototipos y semillas&lt;/strong&gt;: mostré cómo el AjGenesis puede generar sus propios modelos, desde modelos más sencillos. El ejemplo, basado en el modelo de AjGenesisExamples2/3, pasa, de una simple lista de entidades, cada una prototípica de alguna categoría (&amp;quot;kantiana&amp;quot; la llamé ;-) como persona, documento, lugar, empresa, evento, a un modelo más completo, con armado del directorio del proyecto, el archivo que lo describe, los archivos de entidades, los archivos de tecnología, y los scripts del NAnt, listos para usar.&lt;/p&gt; &lt;p&gt;- &lt;strong&gt;Caminos a encarar&lt;/strong&gt;: como una aplicación web que permita exponer los servicios de AjGenesis, el uso de inteligencia artifical, pasar a un modelo ASP (Application Service Provider), integración con IDEs (por ejemplo, un custom tool para Visual Studio 2005, o un plugin para el Eclipse).&lt;/p&gt; &lt;p&gt;- &lt;strong&gt;CodePlex&lt;/strong&gt;: Ahora el proyecto está en &lt;a href="http://www.codeplex.com/ajgenesis" target="_blank"&gt;Codeplex&lt;/a&gt; y ahi tenemos un foro para plantear dudas, discusiones y problemas encontrados.&lt;/p&gt; &lt;p&gt;- &lt;strong&gt;Version 0.5&lt;/strong&gt;: En desarrollo, apenas comienza su ciclo, pueden encontrarla en &lt;a href="http://www.ajlopez.com/downloads/AjGenesis-0.5.zip" target="_blank"&gt;AjGenesis-0.5.zip&lt;/a&gt;, está armada para .NET 2.x. Todavía tengo que incluir los créditos, a Marcelo Fassi y su compañero Fabián, por el código para soportar comentarios en el modelo XML, soporte de acentos en los templates. De mi parte, el mayor cambio ha sido recompilarlo a .NET 2.x, pero este fin de semana, agregué el soporte de respetar código manual (escrito por el programador) entre una y otra generación del artefacto de texto. Espero bloguear en estos días, sobre estas novedades.&lt;/p&gt; &lt;h3&gt;Discusión&lt;/h3&gt; &lt;p&gt;Durante la charla, se plantearon varios temas, entre los asistentes. Tuve la alegría de conocer en persona a Fabio Maulo, activo colaborador del proyecto &lt;a href="http://www.hibernate.org/343.html" target="_blank"&gt;NHibernate&lt;/a&gt;, al que conocía de la lista &lt;a href="http://groups-beta.google.com/group/NHibernate-Hispano" target="_blank"&gt;nhibernate-hispano&lt;/a&gt;, administrada por él y &lt;a href="http://darionet.wordpress.com/" target="_blank"&gt;Darío Quintana&lt;/a&gt;. Ya estámoslo convenciendo para que dé una charla magistral sobre NHibernate en el MUG.&lt;/p&gt; &lt;p&gt;- &lt;strong&gt;Manual&lt;/strong&gt;: fue un tema pedido, la necesidad de tener un manual. Hasta ahora, están los artículos mencionados al principio de este post, para ir entendiendo algunos puntos. Pero es necesario tener un manual, por ejemplo, del lenguaje AjBasic, o que explique algunos usos de las tareas de los ejemplos. Tengo un sistema de documentación en HTML, inspirado en el &lt;a href="http://www.docbook.org/" target="_blank"&gt;DocBook&lt;/a&gt; (dado un formato inicial, generar la documentación), pero sólo escritas cinco páginas. Tácticamente, para suplir esta falta, voy escribiendo artículos sobre el uso del sistema. Carlos Peix sugirió usar la implementación de la gente de &lt;a href="http://velocity.apache.org/" target="_blank"&gt;Velocity&lt;/a&gt;: parece una interesante implementación sobre DocBook.&lt;/p&gt; &lt;p&gt;- &lt;strong&gt;Lista de Generación de Código&lt;/strong&gt;: Me alegró ver a Luis Petek, Carlos Santos, y Alejandro Nelis, munidos de sus respectivas notebooks, trabajando con templates y generando código con AjGenesis, y estudiando el tema. Armaron una lista donde se discuten estos temas, no sólo de AjGenesis, en Google Groups:&lt;/p&gt; &lt;p&gt;&lt;a href="http://groups.google.com/group/codegeneration?hl=es"&gt;http://groups.google.com/group/codegeneration?hl=es&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Tienen armado un template para SQL Server 2005, y otro con persistencia usando Enterprise Library. Notable, muchas gracias!&lt;/p&gt; &lt;p&gt;Ellos plantearon el tema de tener un repositorio de templates. Siempre pienso en ese, en especial viendo a otros generadores de código. Pero no pensé que hiciera falta todavía. Pero voy viendo que puede ser la hora de exponer algo. Otro tema a meditar, para elegir un camino.&lt;/p&gt; &lt;p&gt;- &lt;strong&gt;Esquema en modelo&lt;/strong&gt;: Fabio Maulo dejó un comentario muy amable en el post &lt;a href="http://msmvps.com/blogs/lopez/archive/2007/08/16/desayuno-de-arquitectura-con-ajgenesis.aspx" target="_blank"&gt;Desayuno de Arquitectura con AjGenesis&lt;/a&gt;. Reproduzco su tema planteado acá:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;XSD? &lt;p&gt;Me parece que el tema de &amp;quot;XSD o no&amp;quot; entra poco en los objetivos de AjG. Como mucho, AjG puede tener un servicio mas que es lo de aceptar unos XSD (o el nombre del folder donde estan disponible) y chekear los XMLs ante de empezar a aplicarle los templates. Mas que eso a AjG no le veo. &lt;p&gt;Despues de la Genesis sea los animales que los hombres se organizaron en sociedades que conviven dandose algunas reglas. Los XSD lo veo como las &amp;quot;reglas&amp;quot; que se da una determinadad comunidad de utilizadores de AjG para compartir &amp;nbsp;XML de un determinado dominio o de una determinada forma de definir el dominio. &lt;p&gt;Distintas comunidades podrán eleguir distintos XSD. Por lo menos creo que eso es lo que va a pasar... &lt;p&gt;Despues es probable que la evolución sea similar a la que hubo con los lenguajes y los IDE. Yo tambien he trabajado con el &amp;quot;vi&amp;quot; pero no es que este muy entusiasmado con eso. &lt;p&gt;Usando XSD tendriamos un control &amp;quot;temprano&amp;quot; mientras escribimos el domain y hasta se podría &amp;nbsp;hacer un plug-ins para varios IDE para escribir los templates... quiero decir que si existe el XSD podríamos usar el IDE para chequear que exista un determinado tag y sobre todo que siga funcionando el intellisense para el lenguaje por el cual estamos escribiendo el template.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Ciertamente, el tema XSD o algún otro esquema, es un tema a meditar. Tengo un &amp;quot;spike&amp;quot; de un esquema expresado en... chan chan... un modelo de AjGenesis... :-). Esto permitiría expresar el esquema del modelo, y además, generar, por ejemplo, páginas web de actualización del modelo. Pero es por ahora sólo una idea.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Mantener código manual&lt;/strong&gt;: Se discutió la necesidad de mantener código manual, dentro de una solución, o incluso, dentro del mismo artefacto de texto. En este último caso, ya pude aportar un intento de solución el fin de semana, en la versión 0.5 que mencioné arriba. También se mencionó de mantener lo manual por subclase, o en clases parciales, en el caso de .NET. &lt;a href="http://claudiomeschini.blogspot.com" target="_blank"&gt;Claudio Meschini&lt;/a&gt; comentó sus ideas sobre generar desde el código mismo, y este fin de semana, posteó sobre &lt;a href="http://claudiomeschini.blogspot.com/2007/08/templates-compilados.html" target="_blank"&gt;templates compilados&lt;/a&gt;. Creo que puedo implementar algo así en AjGenesis directamente, pero me parece que se complica incrustrar ciclos en esos textos. Por lo que entendí, Claudio plantea tener un código, compilable, y de ahí obtener el template. Se discutió el tema al terminar la charla, y es interesante. Me recordó lo que hacía en los 80, con mi sistema de generación de código C: a un código que compilaba, le pasaba una macros de editor, para cambiar, por ejemplo &amp;quot;Alta&lt;strong&gt;Cliente&lt;/strong&gt;(&lt;strong&gt;Cliente&lt;/strong&gt; c)&amp;quot; por &amp;quot;Alta&lt;strong&gt;${Entity}&lt;/strong&gt;(&lt;strong&gt;${Entity}&lt;/strong&gt; c)&amp;quot; (me confunde el término template compilado, no sé si entendí bien a Claudio: lo que estoy describiendo, es un código que compila, que luego puede usarse para generar el template genérico). Vean también el proyecto de&amp;nbsp;Claudio&amp;nbsp;&lt;a href="http://claudiomeschini.blogspot.com/2007/08/presentando-quetzal.html" target="_blank"&gt;Quetzal&lt;/a&gt;: si lo tuviera que hacer en Java, apelaría al proyecto &lt;a href="http://velocity.apache.org/anakia/releases/anakia-1.0/" target="_blank"&gt;Anaxia&lt;/a&gt;, dentro de &lt;a href="http://velocity.apache.org/" target="_blank"&gt;Velocity&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Lógica de negocio&lt;/strong&gt;: ¿cómo expresarla en el modelo? Gran tema, discutido en parte en la charla, y en la reunión post charla. Yo creo que hay dos caminos, uno más cercano que otro:&lt;/p&gt; &lt;p&gt;1- Colocar código para un lenguaje, en el propio modelo (algo como&lt;/p&gt; &lt;p&gt;&lt;font face="Consolas"&gt;&amp;lt;Method... &amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;CodeImplementations&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;CodeImplementation Language=&amp;quot;VBNET&amp;quot;&amp;gt;&lt;br /&gt;... codigo VBNET...&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/CodeImplementation&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;CodeImplementation Language=&amp;quot;Java&amp;quot;&amp;gt;&lt;br /&gt;... codigo Java ...&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/CodeImplementation&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/CodeImplementations&amp;gt;&lt;br /&gt;&amp;lt;/Method&amp;gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;2- Definir más abstractamente la lógica, mediante:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;2a)- Seudo lenguaje, podría ser un AjBasic, y trasladores de ese lenguaje al lenguaje destino&lt;/p&gt; &lt;p&gt;2b)- Modelo en XML, como en los sistemas de Rule Engines, que luego se vuelca al sistema (no sólo lenguaje) destino&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Creo que el camino 1, es el más fácil, y pragmático. Y más aplicable en el caso de tener varios sistemas, pero con un solo lenguaje de implementación, con distintas lógicas de negocio para distintas versiones. Las distintas versiones de lógica, se podrían mantener como una parte variable del modelo: hoy generamos con la lógica A1, y mañana cargamos el modelo con la lógica A2, de manera similar a como se carga hoy en los ejemplos a la tecnología.&lt;/p&gt; &lt;p&gt;El camino 2a, es interesante. Pero tenemos que discutir qué es &amp;quot;la lógica de negocio&amp;quot;. No necesariamente la lógica va a un método, puede ser que influya en el esquema de definición de un workflow, en un XML de definición de ese workflow, y demás. Pero si es código a incrustar, se puede pensar en el 1, y el 2a.&lt;/p&gt; &lt;p&gt;El camino 2b, es más abstracto. Pero hay que tener claro exactamente que le pedimos como capacidad a la implementación de la lógica de negocio.&lt;/p&gt; &lt;p&gt;Claudio Meschini mencionó LOP Lenguajes orientados a programación. Puede estudiar:&lt;/p&gt; &lt;p&gt;&lt;a title="http://www.onboard.jetbrains.com/is1/articles/04/10/lop/index.html" href="http://www.onboard.jetbrains.com/is1/articles/04/10/lop/index.html"&gt;http://www.onboard.jetbrains.com/is1/articles/04/10/lop/index.html&lt;/a&gt;&lt;br /&gt;&lt;a title="Language-Oriented Programming talk with Neal Ford" href="http://www.theserverside.com/news/thread.tss?thread_id=46674"&gt;Language-Oriented Programming talk with Neal Ford&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Generando el modelo&lt;/strong&gt;: Recordé en algún momento, un trabajo del bueno de Darío Quintana:&lt;/p&gt; &lt;p&gt;&lt;a href="http://darionet.wordpress.com/2006/09/05/reflexion-generacion-de-codigo-modelo-para-ajgenesis/" target="_blank"&gt;Reflexión + Generación de Código = Modelo para AjGenesis&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Esa es la idea: generar el modelo pragmáticamente, desde donde sea. Fabio sugirió levantar los .hbm de un NHibernate, y usarlo como parte de modelo. No se me había ocurrido, pero es posible e interesante: debería cargar un XML cualquiera como objeto y permitirlo vivir en el modelo (eso implica una nueva forma de cargar un XML en memoria para AjGenesis: al contrario de lo que hace ahora, deberá distinguir entre atributo y elemento hijo de un nodo, pero es un cambio que puedo hacer sin afectar la forma actual de carga de modelo).&lt;/p&gt; &lt;h3&gt;Conclusión&lt;/h3&gt; &lt;p&gt;Excelente que la gente se haya enganchado en el tema! Creo que, de las ideas y discusiones planteadas, las prioridades serán:&lt;/p&gt; &lt;p&gt;- &lt;strong&gt;Manual&lt;/strong&gt;: indispensable para poder explicar el uso del sistema&lt;/p&gt; &lt;p&gt;- &lt;strong&gt;Mantenimiento de código manual&lt;/strong&gt;: algo avancé en la nueva versión 0.5&lt;/p&gt; &lt;p&gt;- &lt;strong&gt;Comunidad&lt;/strong&gt;: ya se va formando. Creo que no hay que forzar las cosas, e ir viendo de alimentar el grupo de generación de código, y seguir paso a paso.&lt;/p&gt; &lt;p&gt;- &lt;strong&gt;Modelado de lógica de negocio&lt;/strong&gt;: interesantísimo tema, con varios caminos a seguir.&lt;/p&gt; &lt;p&gt;De nuevo, gracias a la gente del MUG por haberme permitido hacer esta reunión. Y a todos los que vinieron, gracias! Espero que les haya servido, para ver alguna alternativa más sobre el fascinante tema de creación de software.&lt;/p&gt; &lt;p&gt;Nos leemos!&lt;/p&gt; &lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1160666" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Java/default.aspx">Java</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Arquitectura/default.aspx">Arquitectura</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Generaci_26002300_243_3B00_n+de+C_26002300_243_3B00_digo/default.aspx">Generaci&amp;#243;n de C&amp;#243;digo</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/AjGenesis/default.aspx">AjGenesis</category></item><item><title>Software Fortresses</title><link>http://msmvps.com/blogs/lopez/archive/2007/08/13/software-fortresses.aspx</link><pubDate>Sun, 12 Aug 2007 23:08:56 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1107022</guid><dc:creator>lopez</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1107022</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2007/08/13/software-fortresses.aspx#comments</comments><description>&lt;p&gt;&lt;img style="margin:0px 20px 0px 0px;" height="240" src="http://www.objectwatch.com/images/cover.jpg" width="191" align="left" alt="" /&gt; Software Fortresses (podríamos traducirlo Fortalezas de Software), es el libro más conocido de Roger Sessions, del que pueden conocer más visitando su sitio:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.objectwatch.com"&gt;http://www.objectwatch.com&lt;/a&gt;&lt;/p&gt; &lt;p&gt;en especial sus &amp;quot;white papers&amp;quot;&lt;/p&gt; &lt;p&gt;&lt;a title="http://www.objectwatch.com/white_papers.htm" href="http://www.objectwatch.com/white_papers.htm"&gt;http://www.objectwatch.com/white_papers.htm&lt;/a&gt;&lt;/p&gt; &lt;p&gt;(el de junio de 2003 es el más cercano al libro que vamos a discutir). Publica la ObjecWatch Newsletter, que en el tiempo de publicación del libro (año 2003) era recibida por correo electrónico por más de 20000 suscriptores.&lt;/p&gt; &lt;p&gt;Roger Sessions es un experto en arquitecturas de software de empresa, y el creador del modelo presentado en el libro, el modelo Software Fortress. Veamos un resumen de lo que quiere presentarnos.&lt;/p&gt; &lt;p&gt;Es interesante el prefacio, donde Sessions le pregunta al lector, presunto arquitecto, cuál es la arquitectura del software que tiene armada en la empresa. Se imagina que recibe como respuesta una arquitectura en 3 o n-capas, totalmente ordenada y pensada. Contesta: &amp;quot;Mientes, yo sé cuál es tu arquitectura&amp;quot;. Y pasa a imaginar un &amp;quot;mess&amp;quot;, una mezcla de servidores, bases de datos, aplicaciones web, atadas con alambre diríamos en Argentina, que apenas se sostiene, y que fue creciendo con el tiempo, de forma caótica.&lt;/p&gt; &lt;p&gt;De ahí en más, se dedica presentarnos su modelo.&lt;/p&gt; &lt;p&gt;Un cuestionario que presenta en el capítulo 1, hace un relevo de la situación del lector:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;1. Su compañía tiene docenas de sistemas desarrollados independientemente, algunos armados, otros comprados, otros adquiridos por fusiones con otras empresa. Y algunos, no sabe de dónde vinieron.&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;2. Sus sistemas están interrelacionados de una forma tan compleja, que no puede predecir las consecuencias de un cambio o las ramificaciones de una posible falla.&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;3. Tiene discusiones &amp;quot;religiosas&amp;quot; sobre tecnología. Que Java sí, que .NET no. Ninguna de las dos partes se comunica bien con la otra.&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;4. Los departamentos de su compañía no confían en los datos del otro, así que duplican esfuerzo y trabajo.&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;5. Las bases de datos están hechas una mezcolanza de datos. Cada departamento tiene sus propios datos, sus propios administradores de bases de datos, y sus propias ideas de cómo manejar la seguridad de esos datos.&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;6. Su compañía tiene miedo de conectarse a&amp;nbsp;Internet. Tienen información de misión crítica y privada que no quieren exponer o comprometer hacia afuera.&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;7. Tiene sistemas &amp;quot;legacy&amp;quot; de los que dependen, pero tiene miedo de cambiarlos. Algunos no los cambia por lo frágiles que son, otros porque fueron construídos por empresas que ya no están en el mercado, o porque el desarrollador original pasó a mejor vida, y hasta de algunos no tiene el código fuente.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Si contesta SI a por lo menos 5 de estas preguntas, felicitaciones, no está solo, y éste es su libro.&lt;/p&gt; &lt;h2&gt;Algunas definiciones&lt;/h2&gt; &lt;h3&gt;Definition: Software Fortress&lt;/h3&gt; &lt;p&gt;&lt;strong&gt;A software fortress is a conglomerate of software systems serving a common purpose and typically owned by a cohesive group of individuals. These software systems work together in a tight trust relantionship to provide consistent and meaninful functionality to a hostile outside world.&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Esto incluye detalles técnicos y organizacionales. Desde el punto de vista técnico, una fortaleza de software es un conjunto de sistemas, que pueden ser procesos, servicios, componentes de lógica de negocio, bases de datos.&lt;/p&gt; &lt;p&gt;Desde el punto de vista organizacional, la fortaleza de software agrupa a las personas que trabajan juntas, que tienen un&amp;nbsp;razonable conocimiento de qué está trabajando cada uno, tienen confianza en los sistemas que arman y operan. Es un pequeño departamento de IT dentro de la empresa.&lt;/p&gt; &lt;p&gt;Sessions comienza entonces a desarrollar la idea que el software de una empresa debe organizarse conectando estas fortalezas de software. Adopta una serie de íconos para representar a las fortalezas, y los elementos que pueden adosárseles, para tener un dibujo, una diagrama entendible que describa cada fortaleza.&lt;/p&gt; &lt;p&gt;El libro se dedica a la parte técnica de esos elementos, y lo que Sessions y cía, han descubierto o proponen, como elementos de las distintas fortalezas. &lt;/p&gt; &lt;h3&gt;Definition: Software Fortress Architecture&lt;/h3&gt; &lt;p&gt;&lt;strong&gt;A software fortress architecture is an enterprise architecture consisting of a series of self-contained, mutually suspicios, marginally cooperating software fortresses interacting through carefully crafted and meticulously managed treaty relantionships.&lt;/strong&gt;&lt;/p&gt; &lt;h3&gt;Definition: Software Fortress Model&lt;/h3&gt; &lt;p&gt;&lt;strong&gt;The software fortress model is a methodology consisting of specific algorithms, categories of technologies, and documentation techniques that together can be used to model and build enterprise systems as software fortress architectures.&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Un diagrama de ejemplo de fortaleza:&lt;/p&gt; &lt;p align="center"&gt;&lt;img src="http://www.ajlopez.com/images/articles/softf.jpg" alt="" /&gt; &lt;/p&gt; &lt;p&gt;Algunos de los elementos propuestos, cada uno de los cuales tiene su ícono:&lt;/p&gt; &lt;p&gt;- Las paredes (walls) de una fortaleza están diseñadas para prevenir cualquier comunicación con el exterior, a menos que pase por los canales aprobados&lt;/p&gt; &lt;p&gt;- Los canales apropiados son los puentes levadizos (drawbridges) y son vigilados por guardias (guards).&lt;/p&gt; &lt;p&gt;- Los diplomáticos (envoys) preparan la comunicación entre fortalezas.&lt;/p&gt; &lt;p&gt;- Un baúl de datos (data strongbox) representa la colección de datos persistidos que se usan dentro de la fortaleza.&lt;/p&gt; &lt;p&gt;De ahí en más, Sessions va describiendo cada uno de estos elementos, metafóricos, trasladados a tecnologías, explicando las implementaciones y la razón de ser de cada elemento.&lt;/p&gt; &lt;p&gt;Los íconos que se colocan dentro de cada fortaleza, los llama trabajadores (workers). Utiliza una librería de gráficos:&lt;/p&gt; &lt;p&gt;&lt;a title="http://www.novadevelopment.com/Products/us/aqw/default.aspx" href="http://www.novadevelopment.com/Products/us/aqw/default.aspx"&gt;http://www.novadevelopment.com/Products/us/aqw/default.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;donde aparecen vikingos, guardias, hadas, dinosaurios (representan sistemas &amp;quot;legacy&amp;quot;), brujos, y directores de orquesta, cada uno de los cuales va adosado a un concepto de Sessions.&lt;/p&gt; &lt;h2&gt;Algunos tipos de fortalezas&lt;/h2&gt; &lt;p&gt;&lt;strong&gt;Business application fortress (BAF)&lt;/strong&gt;, donde corre el negocio. Por ejemplo, el control de inventario.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Treaty management fortress (TMF)&lt;/strong&gt; que maneja la relación con otras fortalezas&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Legacy fortress (LF)&lt;/strong&gt; con un dinosaurio dentro, representando alguna aplicación antigua.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Presentation fortress (PF)&lt;/strong&gt; representadas por un caballete de pintor, típica para un servidor o granja de servidores web.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Web service fortress (WSF)&lt;/strong&gt; representadas por un mago, son responsables de atender pedidos de funciones vía Internet.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Service fortress (SF)&lt;/strong&gt; es una de sus últimas adiciones al modelo, representadas por un hada, provee servicios a otras fortalezas.&lt;/p&gt; &lt;p&gt;Algunas fortalezas pueden tener varios íconos dentro.&lt;/p&gt; &lt;p&gt;Lo nuevo de Sessions, es presentar todos estos elementos en fortalezas. Propone que todos los sistemas, en vez de estar conectados de forma difuso, se organicen en fortalezas, donde los puntos de entrada, la seguridad, lo que exponen y consumen, está específicamente determinado por los puntos de entradas (puentes levadizos), guardias, y demás elementos. Esa es la &amp;quot;vuelta de tuerca&amp;quot; que propone. Pueden ver más detalle en el libro o en &amp;quot;paper&amp;quot; mencionado más arriba.&lt;/p&gt; &lt;h2&gt;Resumen de los capítulos&lt;/h2&gt; &lt;h3&gt;Capítulo 2: Diagramming Software Fortresses&lt;/h3&gt; &lt;p&gt;Presenta en más detalle los diagramas, algunos instrumentos de texto como la declaración de un tratado, y los tipos de fortaleza más frecuentes y sus documentos asociados.&lt;/p&gt; &lt;h3&gt;Capítulo 3: Transactions&lt;/h3&gt; &lt;p&gt;Explicita el tema tan importante de transacciones, explica qué son los recursos &amp;quot;trancsactionally aware&amp;quot;, que participan de transacciones. Si los recursos a participar de una trasacción se encuentran separados, aparece la figura del Distributed Transaction Coordinator (DTC).&lt;/p&gt; &lt;h3&gt;Capítulo 4: Drawbridges&lt;/h3&gt; &lt;p&gt;Son las tuberías por las que fluye la información de fortaleza a fortaleza. Es un punto de entrada definido a una fortaleza. Intervienen los diplomáticos para preparar el mensaje, los guardias para ver de dejar entrar un mensaje o no. Luego discute distintas tecnologías, como sobres SOAP, COM+, Enterprise JavaBeans, que pueden usarse como base de estos puentes de comunicación. Como tema importante, lo subdivide en los dos siguientes capítulos.&lt;/p&gt; &lt;h3&gt;Capítulo 5: Synchronous Drawbridges&lt;/h3&gt; &lt;p&gt;Es un canal donde el que llama espera una respuesta inmediata, como si fuera un llamada a función. Sessions destaca que&amp;nbsp;la tecnología de puentes sincrónicos se basa en componentes. Hay un &amp;quot;objeto&amp;quot; (no necesariamente un objeto, pero es frecuente) remoto que expone una interfaz, y se ve opaco desde el cliente. Plantea el problema de que históricamente, surgieron tecnologías homogéneas, que sólo permiten comunicar dos partes de la misma tecnología, pero en los últimos años surgieron, ante la necesidad de interoperabilidad, las tecnologías heterogéneas. Se deben resolver problemas como la seguridad automática (el cliente debe &amp;quot;aparecer&amp;quot; de alguna forma en el servidor llamado), manejo de instancias (cuándo un componente nace, y cuándo se libera) y el flujo de transacciones (cuándo una transacción aparece, y se expande, y cuándo viene distribuida).&lt;/p&gt; &lt;h3&gt;Capítulo 6: Asynchronous Drawbridges&lt;/h3&gt; &lt;p&gt;En situaciones donde el mensaje enviado no necesita una respuesta inmediata, se pueden usar puentes asincrónicos, donde la respuesta puede venir mucho más adelante en el tiempo. Acá, históricamente se han implementado con colas de mensajería. Se discute el tema transacciones en las colas, la persistencia de los mensajes, y la posibilidad de que el mensaje tenga varios destinatarios. De nuevo aparece el problema de puentes homogéneos y heterogéneos.&lt;/p&gt; &lt;h3&gt;Capítulo 7: Guards and Walls&lt;/h3&gt; &lt;p&gt;Las paredes impiden el acceso a la fortaleza. Los guardias lo permiten. El arquitecto de la fortaleza es responsable de ver cuán selectivo será un guardia y qué tecnologías se usarán para implementar esa selectividad. Se discuten los temas de: fortificación, validación, auditoría, autenticación, privacía, integridad, no repudiación, autorización.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Fortificación&lt;/strong&gt; se refiere a la habilidad de la fortaleza de prevenir la entrada a la misma, excepto a través de los puentes.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Validación&lt;/strong&gt; es el control y recontrol de las entradas provistas por el exterior o el usuario.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Auditoría&lt;/strong&gt; es la habilidad de trazar todos los cambios al estado interno de la fortaleza.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Autenticación&lt;/strong&gt; es el procedimiento que se usa para convencer al guardia de quién está tratando de acceder.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Privacía&lt;/strong&gt; es la capacidad de enviar información de tal manera que no pueda ser leída por usuarios no autorizados.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Integridad&lt;/strong&gt; se asegura que la información en ruta no sea cambiada.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;No repudiación&lt;/strong&gt; se refiere a la capacidad de probar más adelante en el tiempo que tal informacion vino de tal origen.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Autorización&lt;/strong&gt; es la habilidad de determinar, en base a la información que viene en el pedido (no según la fortaleza que lo pide) si su ejecución pedido puede ser permitida.&lt;/p&gt; &lt;h3&gt;Capítulo 8: Treaties&lt;/h3&gt; &lt;p&gt;Son los tratados, acuerdos formales entre fortalezas que definen cómo trabajaran entre ellas.&lt;/p&gt; &lt;h3&gt;Capítulo 9: General Fortress Issues&lt;/h3&gt; &lt;p&gt;Se tratan temas como escalabilidad. Una fortaleza es escalable si su unidad de costo de atender un pedido, es lo suficientemente baja para no perder una ganancia. Si cada pedido implica una pérdida, debería acotarse la cantidad de pedidos a atender. Otra condición para la escalabilidad es que podamos incrementar la carga de trabajo de un proceso, ya sea con mejores servidores (scale-up) o agregando servidores (scale-out).&lt;/p&gt; &lt;p&gt;Otro tema es la &amp;quot;reliability&amp;quot;, la confianza que tenemos en poder contar con la fortaleza cuando la necesitemos. Y finalmente, la integridad. Una fortaleza es diseñada para proveer una alta integridad si no hay nada que la dañe o la deje en un estado incompleto, aún ante el fallo de otras fortalezas.&lt;/p&gt; &lt;h3&gt;Capítulo 10: Internet Fortresses&lt;/h3&gt; &lt;p&gt;El tema Internet merece un capítulo aparte. Las fortalezas de presentación y de servicios web pueden ser expuestas, por ejemplo, en una zona desmilitarizada, y comunicarse de formas específicas con el resto de la empresa. Se discuten tecnologías como ASP, JSP, ASP.NET, el tema de la escalibidad (con un cluster, por ejemplo, scale-out), seguridad, como el uso de firewalls, zonas desmilitarizadas, usar servidores de presentación con sólo algunas características activadas; disponibilidad, integridad, y las tecnologías de servicios web, con los mismos temas.&lt;/p&gt; &lt;h3&gt;Capítulo 11: Business Application Fortresses&lt;/h3&gt; &lt;p&gt;Son el pan y manteca de la empresa. Son los que &amp;quot;hacen el dinero&amp;quot;. Son los procesos de contabilidad, las compras, ventas. Merecen nuestro respeto y gratitud. Se discuten componentes, manejo de estado, fronteras de transacciones y su manejo, el apalancamiento de &amp;quot;clusters&amp;quot;, Java vs .NET, y hasta el costo.&lt;/p&gt; &lt;h3&gt;Capítulo 12: Legacy, Service, and Treaty Management Fortresses&lt;/h3&gt; &lt;p&gt;Un capítulo con varios temas. Por un lado, los sistemas &amp;quot;legacy&amp;quot;. Aparecen los servicios, como por ejemplo, el &amp;quot;broadcast service&amp;quot;, cómo un &amp;quot;publisher&amp;quot; envía un mensaje a varios suscriptores. Las fortalezas de manejo de tratados manejan las relaciones complejas entre tres o más fortalezas.&lt;/p&gt; &lt;h3&gt;Capítulo 13: Software Fortress Design Review&lt;/h3&gt; &lt;p&gt;Presenta 25 preguntas que se deben realizar durante el diseño de una solución de fortalezas de software. Son tres grupos: para gerentes de nivel empresarial, para arquitectos de nivel empresarial, y para arquitectos y diseñadores de fortalezas individuales.&lt;/p&gt; &lt;h3&gt;Capítulo 14: Case Study&lt;/h3&gt; &lt;p&gt;Finalmente, se presenta un caso de estudio, una empresa que vende por Internet. Se plantea el uso de iteraciones en el desarrollo, en este caso se usan dos. Se usan documentos para analizar la complejidad de la arquitectura a armar.&lt;/p&gt; &lt;h3&gt;Capítulo 15: Postlude&lt;/h3&gt; &lt;p&gt;Presenta diez puntos importantes sobre fortalezas de software, y diez puntos para adoptar el modelo Sessions, más diez reglas para su diseño, y diez ideas controversiales del modelo (como poner en segundo lugar el rendimiento, y que los guardias son los encargados de la seguridad, y luego en la fortaleza se puede hacer lo que se quiera). Aparecen diez consideraciones para evaluar J2EE vs .NET, como si necesita o no ejecutar en un ambiente no Windows. Y diez observaciones sobre el estado de la industria del software, notablemente una: la industria del software no tiene un modelo conceptual para construir sistemas empresariales.&lt;/p&gt; &lt;p&gt;Se agradece al final la presencia de un glosario, que nos permite entender cada término presentado.&lt;/p&gt; &lt;h2&gt;Conclusión&lt;/h2&gt; &lt;p&gt;Es un libro para leer, y sacar algunas ideas. No todos tenemos que lidiar con todos los problemas presentados, pero me gusta el libro porque presenta eso: problemas. Luego, abstraidos de las soluciones tecnológicas, son mejor entendidos. Creo que muchos estudiamos tecnologías, sin tener en claro cuáles son los problemas que solucionan, y las razones, las causas de la aparición de esos problemas. Los conceptos de Sessions permiten tener claro esos temas, y luego, como adicional, menciona y describe las capacidades de las tecnologías disponibles para resolver esos problemas. Es un libro para aclarar la mente.&lt;/p&gt; &lt;p&gt;Gracias a la biblioteca de &lt;a href="http://www.southworks.net" target="_blank"&gt;SouthWorks&lt;/a&gt;, pude leerlo y comentarlo acá.&lt;/p&gt; &lt;p&gt;Nos leemos!&lt;/p&gt; &lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1107022" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/Arquitectura/default.aspx">Arquitectura</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Libros/default.aspx">Libros</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category></item><item><title>Generando aplicaciones con AjGenesis</title><link>http://msmvps.com/blogs/lopez/archive/2007/06/25/generando-aplicaciones-con-ajgenesis.aspx</link><pubDate>Mon, 25 Jun 2007 08:20:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:986671</guid><dc:creator>lopez</dc:creator><slash:comments>16</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=986671</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2007/06/25/generando-aplicaciones-con-ajgenesis.aspx#comments</comments><description>&lt;p&gt;En estos días, estuve escribiendo unos ejemplos de AjGenesis&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.ajlopez.com/ajgenesis"&gt;http://www.ajlopez.com/ajgenesis&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;mi proyecto de código abierto de generación de código, para producir, desde un modelo, aplicaciones tanto en ASP.NET 1.x/2.x, como en JSP, tanto usando SQL Server en el primer caso, como con MySql en Java, y tanto con ADO.NET, como con NHibernate, Hibernate, ya sea con arquitectura de capas, como en capas a la Domain-Driven Design de Evans.&lt;/p&gt;
&lt;p&gt;Sigo escribiendo esos ejemplos, pero ya hay algo publicado en&lt;/p&gt;
&lt;p&gt;&lt;a title="AjGenesisExamples3.zip" href="http://www.ajlopez.com/downloads/AjGenesisExamples3.zip"&gt;AjGenesisExamples3.zip&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Usaremos la versión del proyecto que está actualmente en desarrollo:&lt;/p&gt;
&lt;p&gt;&lt;a title="AjGenesis-0.4.3.zip" href="http://www.ajlopez.com/downloads/AjGenesis-0.4.3.zip"&gt;AjGenesis-0.4.3.zip&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Quisiera en este artículo, comentar cómo funciona y se construye, uno de esos ejemplos. Permítanme primero repasar&amp;nbsp;algo sobre el proyecto. Primero, &amp;quot;the big picture&amp;quot;:&lt;/p&gt;
&lt;p&gt;&lt;img height="863" alt="" src="http://www.ajlopez.com/ajgenesis/AjGenesisDrawings01-01.gif" width="561" border="0" /&gt;&lt;/p&gt;
&lt;p&gt;Está escrito en Visual Basic .NET 1.x,&amp;nbsp;y es código abierto, pues viene con una licencia tipo BSD, que permite utilizarlo en cualquier proyecto que quieran. Se puede usar como librería, invocado desde nuestro proyecto, se puede invocar desde la línea de comando, o puede ser utilizado desde el poderoso &lt;a href="http://nant.sourceforge.net/" target="_blank"&gt;NAnt&lt;/a&gt; (esto último me permitió organizar mejor las tareas que realiza el generador de código).&lt;/p&gt;
&lt;p&gt;En la &lt;a href="http://www.ajlopez.com/ajgenesis"&gt;página del proyecto&lt;/a&gt; (y en el proyecto mismo) hay varios ejemplos, que generan código desde un modelo, usando plantillas. Los ejemplos generan código PHP, Java, JSP, VB.NET, C#, ASP.NET, y hasta scripts de base de datos y procedimientos almacenados. Quisiera destacar dos puntos:&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;- El modelo del que parte es totalmente definible por el usuario&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;- Las tareas y plantillas a aplicar son totalmente programables y controlables&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;Esto lo diferencia de otros generadores. Podemos construirnos nuestro propio modelo, y sus propias plantillas, para generar los artefactos de texto que prefiera. Otros sistemas parten de la base de datos, y sólo generan un grupo de artefactos de textos predefinidos (por ejemplo, POJOs, plain old java objects, o DAOs, Data Access Objects). Pero con &lt;a href="http://www.ajlopez.com/ajgenesis" target="_blank"&gt;AjGenesis&lt;/a&gt; puede generar el artefacto de texto que se nos ocurra.&lt;/p&gt;
&lt;p&gt;Para comprender mejor que el modelo se puede construir y consumir como uno lo disponga, ver un artículo anterior:&lt;/p&gt;
&lt;p&gt;&lt;a title="Generando Código- Hello World con AjGenesis" href="http://msmvps.com/blogs/lopez/archive/2006/11/19/generando-c-digo-hello-world-con-ajgenesis.aspx"&gt;Generando Código- Hello World con AjGenesis&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ahí se describen los pasos iniciales, y un modelo que es totalmente libre. &lt;/p&gt;
&lt;h3&gt;Creando una aplicación&lt;/h3&gt;
&lt;p&gt;&lt;br /&gt;Encaremos hoy algo más completo. Necesitamos armar una solución sencilla, con dos tablas, sobre una base de datos SQL Server, con código VB.NET 2.0, con interface web, capa de servicios, capa de datos, entidades y componentes de negocio a la Microsoft. Queremos generar la solución, los proyectos, los scripts de creación de la base, y procedimientos almacenados. Este ejemplo está incluido en los ejemplos &lt;a title="AjGenesisExamples3.zip" href="http://www.ajlopez.com/downloads/AjGenesisExamples3.zip"&gt;AjGenesisExamples3.zip&lt;/a&gt;. Primer paso: escribir el modelo.&lt;/p&gt;
&lt;h3&gt;El proyecto&lt;/h3&gt;
&lt;p&gt;En un directorio de proyectos de los ejemplos que acompañan este artículo, hay un directorio Projects/AjFirstExample.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.ajlopez.com/images/articles/AjFirstExample.jpg" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;En ese directorio está el archivo Project.xml que contiene el modelo.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;&amp;lt;Project&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;Name&amp;gt;AjFirstExample&amp;lt;/Name&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;Description&amp;gt;First Example using AjGenesis&amp;lt;/Description&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;Prefix&amp;gt;AjFE&amp;lt;/Prefix&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;Domain&amp;gt;com.ajlopez&amp;lt;/Domain&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;CompanyName&amp;gt;ajlopez&amp;lt;/CompanyName&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;Model&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;Entities&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;lt;Entity Source=&amp;quot;Entities/Customer.xml&amp;quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;lt;Entity Source=&amp;quot;Entities/Supplier.xml&amp;quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/Entities&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/Model&amp;gt;&lt;br /&gt;&amp;lt;/Project&amp;gt;&lt;/font&gt; 
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Recordemos: el modelo es libre. Acá definimos, para los templates que vamos a usar, las entidades de nuestro modelo: customers y suppliers.&lt;/p&gt;
&lt;h3&gt;Las entidades&lt;/h3&gt;
&lt;p&gt;Para que un archivo XML no resulte terriblemente largo, AjGenesis permite que cualquier nodo del modelo se especifique en un archivo aparte. Es un criterio que he usado para definir cómo se escribe el modelo: el XML resultante no debe herir a la vista, debe ser entendible y abarcable en una lectura.&lt;/p&gt;
&lt;p&gt;En el Project.xml, eso aparece en el caso de las entidades, con el atributo Source. Examinemos una entidad, escrita en Entities/Customer.xml:&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;font face="Courier New"&gt;&amp;lt;Entity&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;Name&amp;gt;Customer&amp;lt;/Name&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;Description&amp;gt;Customer Entity&amp;lt;/Description&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;SetName&amp;gt;Customers&amp;lt;/SetName&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;Descriptor&amp;gt;Customer&amp;lt;/Descriptor&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;SetDescriptor&amp;gt;Customers&amp;lt;/SetDescriptor&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;SqlTable&amp;gt;customers&amp;lt;/SqlTable&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;Properties&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;Property&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;Name&amp;gt;Id&amp;lt;/Name&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;Type&amp;gt;Id&amp;lt;/Type&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/Property&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;Property&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;Name&amp;gt;Name&amp;lt;/Name&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;Type&amp;gt;Text&amp;lt;/Type&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;SqlType&amp;gt;varchar(200)&amp;lt;/SqlType&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/Property&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;Property&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;Name&amp;gt;Address&amp;lt;/Name&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;Type&amp;gt;Text&amp;lt;/Type&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;SqlType&amp;gt;text&amp;lt;/SqlType&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/Property&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;Property&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;Name&amp;gt;Notes&amp;lt;/Name&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;Type&amp;gt;Text&amp;lt;/Type&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;SqlType&amp;gt;text&amp;lt;/SqlType&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/Property&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/Properties&amp;gt;&lt;br /&gt;&amp;lt;/Entity&amp;gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;Hay atributos de la entidad, como su nombre y descripción, en singular y plural, que sirve para nombrarlas en las páginas resultantes, o dentro del código. Las propiedades son los campos a mantener en cada entidad. Vemos que en este ejemplo, no hay más que datos dentro de una entidad.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Aparte de las entidades, en otro directorio, Technologies, se especifica el modelo dependiente de la tecnología, como VbNet2:&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;&amp;lt;Technology&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;Programming&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Dialect&amp;gt;VbNet2&amp;lt;/Dialect&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/Programming&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;Database&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Dialect&amp;gt;MsSql&amp;lt;/Dialect&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Name&amp;gt;AjFirstExample&amp;lt;/Name&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Username&amp;gt;sa&amp;lt;/Username&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Prefix&amp;gt;ajfe_&amp;lt;/Prefix&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Host&amp;gt;(local)&amp;lt;/Host&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/Database&amp;gt;&lt;br /&gt;&amp;lt;/Technology&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;h3&gt;Las plantillas&lt;/h3&gt;
&lt;p&gt;En el directorio Templates/VbNet2 encontramos&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.ajlopez.com/images/articles/VbNet2.jpg" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;Son las plantillas para generación de código VB.Net 2.0. También encontraremos plantillas para C# 1.x y 2, Vb.NET 1, Java. Hay plantillas para usar Nhibernate, Hibernate, JSP, MySql, y conceptos de Domain-Driven Design. Todo desde el mismo modelo. Tomemos como muestra una plantilla, la que genera la entidad en Visual Basic, EntityVb.tpl:&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;font face="Courier New"&gt;&amp;lt;#&lt;br /&gt;message &amp;quot;Generating Entity ${Entity.Name}&amp;quot;&lt;br /&gt;include &amp;quot;Templates/VbNet2/VbFunctions.tpl&amp;quot;&lt;br /&gt;include &amp;quot;Templates/VbNet2/Prologue.tpl&amp;quot;&lt;br /&gt;#&amp;gt;&lt;br /&gt;&amp;#39;&lt;br /&gt;&amp;#39; Project ${Project.Name}&lt;br /&gt;&amp;#39; ${Project.Description}&lt;br /&gt;&amp;#39; Entity ${Entity.Name}&lt;br /&gt;&amp;#39; ${Entity.Description}&lt;br /&gt;&amp;#39; &lt;br /&gt;&amp;#39;&lt;br /&gt;Public Class ${Entity.Name} &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;&amp;#39; Private Fields &lt;/font&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;&amp;lt;# for each Property in Entity.Properties&lt;br /&gt;&amp;nbsp; message &amp;quot;Procesando Campo ${Property.Name}&amp;quot;&lt;br /&gt;#&amp;gt; &lt;br /&gt;Private m${Property.Name} as ${VbType(Property)}&lt;br /&gt;&amp;lt;# &lt;br /&gt;&amp;nbsp; end for&lt;br /&gt;#&amp;gt;&lt;br /&gt;&amp;#39; Default Constructor &lt;/font&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;Public Sub New()&lt;br /&gt;End Sub&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;&lt;br /&gt;&amp;#39; Public Properties &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;&amp;lt;#&lt;br /&gt;&amp;nbsp; for each Property in Entity.Properties&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; message &amp;quot;Procesando Propiedad ${Property.Name}&amp;quot;&lt;br /&gt;#&amp;gt; &lt;br /&gt;Public Property ${Property.Name}() as ${VbType(Property)}&lt;br /&gt;&amp;nbsp; Get&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Return m${Property.Name}&lt;br /&gt;&amp;nbsp; End Get&lt;br /&gt;&amp;nbsp; Set(ByVal Value As ${VbType(Property)})&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; m${Property.Name} = Value&lt;br /&gt;&amp;nbsp; End Set&lt;br /&gt;End Property&lt;br /&gt;&amp;lt;#&lt;br /&gt;end for&lt;br /&gt;#&amp;gt; &lt;/font&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;End Class&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Como antes, se usan estructuras de control, y recorrido de una entidad del modelo. No se maneja el XML. El formato XML es la forma de serialización del modelo. Durante el proceso de la plantilla, el modelo ya está en memoria, accesible desde variables dinámicas.&lt;/p&gt;
&lt;h3&gt;Los pasos&lt;/h3&gt;
&lt;p&gt;Ahora tenemos más archivos a generar: desde las páginas ASPX, y su código asociado, los proyectos de fachada de servicio, entidades, acceso a datos, el archivo de solución, y más. Para automatizar esta generación, el ejemplo tiene varios archivos de tareas, en el directorio Tasks, donde se describen los pasos a ejecutar. Hay dos grandes tareas: los pasos a ejecutar independientemente de la tecnología elegida, como completar el modelo, revisarlo, y las dependientes de la tecnología, como generar tal archivo JSP o ASPX, dependiendo de si queremos Java o .NET.&lt;/p&gt;
&lt;p&gt;La tarea de completar el modelo está&amp;nbsp;a cargo de Tasks\BuildProject.ajg, que comienza con:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;&amp;#39;&lt;br /&gt;&amp;#39; Build Project&lt;br /&gt;&amp;#39; Complete the Project Data&lt;br /&gt;&amp;#39; Project must be loaded in global variable Project&lt;br /&gt;&amp;#39; &lt;/font&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;PrintLine &amp;quot;Completing Project ${Project.Name}&amp;quot; &lt;/font&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;include &amp;quot;Templates/EntityFunctions.tpl&amp;quot;&lt;br /&gt;include &amp;quot;Templates/Utilities.tpl&amp;quot; &lt;/font&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;if not Project.Title then&lt;br /&gt;&amp;nbsp; Project.Title = Project.Name&lt;br /&gt;end if &lt;/font&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;if not Project.Version then&lt;br /&gt;&amp;nbsp; Project.Version = &amp;quot;1.0.*&amp;quot;&lt;br /&gt;end if &lt;/font&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;if not Project.SystemName then&lt;br /&gt;&amp;nbsp; Project.SystemName = Project.Name&lt;br /&gt;end if &lt;/font&gt;
&lt;p&gt;Acá incluye algunas funciones auxiliares, y luego comienza a completar el modelo que reside en la variable Project. Ejemplo: si falta Project.Title le coloca como título el Project.Name. Prosigue:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;for each Entity in Project.Model.Entities&lt;br /&gt;&amp;nbsp; PrintLine &amp;quot;Entity &amp;quot; + Entity.Name &lt;/font&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;&amp;nbsp; for each Property in Entity.Properties&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PrintLine &amp;quot;Property &amp;quot; &amp;amp; Property.Name&lt;/font&gt;&lt;/p&gt;&lt;font face="Courier New"&gt;
&lt;p&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font face="Courier New"&gt;if not Property.Description then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Property.Description = Property.Name&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end if&lt;/font&gt;&lt;/p&gt;&lt;font face="Courier New"&gt;
&lt;p&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not Property.Title then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Property.Title = Property.Description&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if Property.Type=&amp;quot;Id&amp;quot; and not Property.SqlType then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Property.SqlType=&amp;quot;int&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if Property.SqlType and not Property.SqlColumn then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Property.SqlColumn = Property.Name&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if Property.Type=&amp;quot;Id&amp;quot; and not Entity.IdProperty then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Entity.IdProperty = Property&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if Property.Reference then&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;...&lt;/font&gt; 
&lt;p&gt;Mas adelante, se ejecutan las tareas de tecnología. Como ejemplo, veamos un fragmento de Tasks\BuildVbNet2.ajg: &lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;&amp;lt;#&lt;br /&gt;include &amp;quot;Templates/Utilities.tpl&amp;quot;&lt;br /&gt;include &amp;quot;Templates/VbNet2/UtilitiesVb.tpl&amp;quot; &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;message &amp;quot;Creating Directories...&amp;quot; &lt;/font&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;FileManager.CreateDirectory(Project.BuildDir)&lt;br /&gt;FileManager.CreateDirectory(&amp;quot;${Project.BuildDir}/Sql&amp;quot;)&lt;br /&gt;FileManager.CreateDirectory(&amp;quot;${Project.BuildDir}/Src/${Project.Name}.Entities&amp;quot;)&lt;br /&gt;FileManager.CreateDirectory(&amp;quot;${Project.BuildDir}/Src/${Project.Name}.Entities/My Project&amp;quot;)&lt;br /&gt;FileManager.CreateDirectory(&amp;quot;${Project.BuildDir}/Src/${Project.Name}.Data&amp;quot;)&lt;br /&gt;FileManager.CreateDirectory(&amp;quot;${Project.BuildDir}/Src/${Project.Name}.Data/My Project&amp;quot;)&lt;br /&gt;FileManager.CreateDirectory(&amp;quot;${Project.BuildDir}/Src/${Project.Name}.Services&amp;quot;)&lt;br /&gt;…&lt;/font&gt; 
&lt;p&gt;En este fragmento, se crean los directorios necesarios para albergar la solución. El nombre del directorio se extrae del modelo desde ${Project.BuildDir}. 
&lt;h3&gt;Generando la solución&lt;/h3&gt;
&lt;p&gt;Podríamos lanzar las tareas desde la línea de comando, pero tenemos un build armado para el Nant, uno para cada tecnología. Ejecutamos las tareas build, buildsql, y deploysql de AjFirstExampleVbNet2.build:&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.ajlopez.com/images/articles/nantgui2.jpg" alt="" /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;En el directorio Build/AjFirstExample/VbNet2/Sql quedan los scripts de creación de la base y procedimientos almacenados. Y en el directorio hermano Src, sorpresa, tenemos la solución ya preparada:&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.ajlopez.com/images/articles/Src.jpg" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;Encontramos varios proyectos armados. Si levantamos la solución en el Visual Studio 2005, aparece todo el código generado:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.ajlopez.com/images/articles/ajfirstexamplevs.jpg" alt="" /&gt; &lt;br /&gt;&lt;br /&gt;Con otro archive build AjFirstExampleCSharp2.build, generamos la misma solución en CSharp:&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;img src="http://www.ajlopez.com/images/articles/ajfirstexamplevs2.jpg" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;Encontrarán otros proyectos y ejemplos de .build, que usan NHibernate, Hibernate, JSP, y conceptos de DDD.&lt;/p&gt;
&lt;h3&gt;Reflexiones&lt;/h3&gt;
&lt;p&gt;Claro, no todo se puede generar automáticamente. Es importante tener siempre presente esto. Pero en el día a día, reconozcamos que tenemos cantidad de texto repetitivo, tareas que bien podemos encargar al propio software. 
&lt;p&gt;Recordemos siempre: el modelo es libre. Los ejemplos presentados son solamente ejemplos: podemos general el modelo que queremos, y escribir las plantillas que necesitamos. Es importante escribir las plantillas de forma que el código generado sea similar al que hubiéramos generado nosotros. Si no nos sentimos cómodos con el código generado, si no tiene nuestro estilo, nuestra experiencia, terminamos generando algo que no entendemos. 
&lt;p&gt;Otra reflexión: el modelo debe ser independiente de la tecnología. En el ejemplo final, hemos visto cómo, desde el mismo modelo, se puede generar la solución para VB.NET2, y para CSharp. Encontrarán las plantillas para generarla con Nhibernate, con DDD, con Hibernate, con Java y JSP, y podemos escribir la que necesitamos. 
&lt;p&gt;El software debe ayudarnos a generar software. Nuestra experiencia cuenta: lo que aprendimos de hacer aplicaciones, podemos volcarlo en esta especie de sistema experto, generador de código. Justamente, en el futuro, espero poder incorporar al proyecto, en las plantillas, más toma de decisiones: así como volcamos nuestra experiencia en escritura de aplicaciones, podemos incorporar nuestro conocimiento acumulado sobre patrones, arquitectura, estilos de programación. 
&lt;p&gt;Y al ser de código abierto, AjGenesis permite que lo extendamos, a nuestro gusto y necesidad. 
&lt;p&gt;Se aceptan sugerencias, historias de uso. Pueden escribir&amp;nbsp;comentarios a este artículo, o escribirme. Desde ya, muchas gracias por cualquier &amp;quot;feedback&amp;quot;. 
&lt;p&gt;Nos leemos! 
&lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=986671" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Arquitectura/default.aspx">Arquitectura</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Generaci_26002300_243_3B00_n+de+C_26002300_243_3B00_digo/default.aspx">Generaci&amp;#243;n de C&amp;#243;digo</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Domain-Driven+Design/default.aspx">Domain-Driven Design</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/AjGenesis/default.aspx">AjGenesis</category></item><item><title>Los libros de Martín Salías</title><link>http://msmvps.com/blogs/lopez/archive/2007/03/03/los-libros-de-mart-n-sal-as.aspx</link><pubDate>Sat, 03 Mar 2007 09:28:23 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:636498</guid><dc:creator>lopez</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=636498</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2007/03/03/los-libros-de-mart-n-sal-as.aspx#comments</comments><description>&lt;p&gt;El bueno de &lt;a href="http://www.salias.com.ar" target="_blank"&gt;Martín Salías&lt;/a&gt; siempre se ha caracterizado por su amabilidad, y su disposición a compartir todo lo que conoce, desde arquitectura de software hasta sus opiniones sobre Virilio. Al contrario de mí, que no me desprendo de mis libros (me temo que son mi debilidad), él los ofrece a sus compañeros de trabajo, y aún más, a los socios del &lt;a href="http://www.mug.org.ar" target="_blank"&gt;Microsoft User Groups de Argentina&lt;/a&gt;: un santo varón :-)&lt;/p&gt; &lt;p&gt;Independientemente de si Ud. cae en algunas de esas categorías, le recomiendo una visita a la lista de libros&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.salias.com.ar/bookshelf.asp" target="_blank"&gt;Technical Bookshelf&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Hay de todo: inteligencia artificial, historia de la computación, el venerable FoxPro, arquitectura de software, sistemas operativos, .NET y ASP.NET, objetos, XML, metodologías ágiles, y más....&lt;/p&gt; &lt;p&gt;Pasen, vean y tomen!&lt;/p&gt; &lt;p&gt;Nos leemos!&lt;/p&gt; &lt;p&gt;Angel "Java" Lopez&lt;br&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=636498" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Arquitectura/default.aspx">Arquitectura</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Libros/default.aspx">Libros</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Inteligencia+Artificial/default.aspx">Inteligencia Artificial</category></item><item><title>Charlas en Buenos Aires y Bahía Blanca: Windows Workflow Foundation, Communication Foundation, .NET 2.0</title><link>http://msmvps.com/blogs/lopez/archive/2006/11/08/Charlas-en-Buenos-Aires-y-Bah_ED00_a-Blanca_3A00_-Windows-Workflow-Foundation_2C00_-Communication-Foundation_2C00_-.NET-2.0.aspx</link><pubDate>Wed, 08 Nov 2006 23:59:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:268467</guid><dc:creator>lopez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=268467</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2006/11/08/Charlas-en-Buenos-Aires-y-Bah_ED00_a-Blanca_3A00_-Windows-Workflow-Foundation_2C00_-Communication-Foundation_2C00_-.NET-2.0.aspx#comments</comments><description>&lt;p&gt;Estoy preparando charlas para el &lt;a href="http://www.mug.org.ar/" target="_blank"&gt;Grupo de Usuarios Microsoft&lt;/a&gt; de Argentina, sobre Windows Workflow Foundation, Windows Communication Foundation (el viejo Indigo), en Buenos Aires, y viajar&amp;eacute; a Bah&amp;iacute;a Blanca para hablar de .NET 2.0 en general, con las novedades de ASP.NET 2.0. Espero volver nuevamente en diciembre a Bah&amp;iacute;a Blanca, para dar alguna charla sobre arquitectura .NET paso a paso, donde me explayar&amp;eacute; sobre las razones y fundamentos de un estilo arquitect&amp;oacute;nico en capas, y su implementaci&amp;oacute;n en .NET. Como siempre, en estas charlas algo mechar&amp;eacute; de mi siempre presente generador de c&amp;oacute;digo, el &lt;a href="http://www.ajlopez.com/ajgenesis" target="_blank"&gt;AjGenesis&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Para los que quieran asistir, la informaci&amp;oacute;n del evento de WF est&amp;aacute; en&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.mug.org.ar/Eventos/2412.aspx"&gt;http://www.mug.org.ar/Eventos/2412.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Event_Date" id="_ctl0__ctl0__ctl0_Briefdescription1"&gt;Veremos en el curso, su uso desde aplicaciones WinForms, ASP.NET, y en aplicaciones distribuidas, con instancias de workflows secuenciales, de estado, con actividades predefinidas o creadas, y usando los servicios de persistencia y de tracking.&lt;br /&gt;&lt;br /&gt;En cuanto a la visita a Bah&amp;iacute;a Blanca, m&amp;aacute;s info en&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Event_Date"&gt;&lt;a href="http://www.mug.org.ar/Eventos/2446.aspx"&gt;http://www.mug.org.ar/Eventos/2446.aspx&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Event_Date"&gt;organizado en conjunto con&amp;nbsp;&lt;span class="Event_Date" id="_ctl0__ctl0__ctl0_Briefdescription1"&gt;la Universidad Tecnol&amp;oacute;gica Nacional, Facultad Regional Bah&amp;iacute;a Blanca.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Event_Date"&gt;&lt;span class="Event_Date"&gt;&amp;nbsp;Todav&amp;iacute;a no est&amp;aacute; publicada el seminario de Windows Communication Foundation, pero deber&amp;aacute; ser en diciembre, en Buenos Aires.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Event_Date"&gt;&lt;span class="Event_Date"&gt;Como ver&amp;aacute;n estoy algo atareado. Sigo pasando a texto las charlas que estoy dando, espero poder publicar algo antes de fin de a&amp;ntilde;o, para los que no puedan asistir.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Event_Date"&gt;&lt;span class="Event_Date"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Event_Date"&gt;&lt;span class="Event_Date"&gt;Nos leemos!&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Event_Date"&gt;&lt;span class="Event_Date"&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Event_Date"&gt;&lt;span class="Event_Date"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Event_Date"&gt;&lt;span class="Event_Date"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=268467" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Arquitectura/default.aspx">Arquitectura</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Windows+Workflow+Foundation/default.aspx">Windows Workflow Foundation</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Cursos/default.aspx">Cursos</category></item><item><title>Jornadas de Arquitectura .NET paso a paso</title><link>http://msmvps.com/blogs/lopez/archive/2006/10/12/Jornadas-de-Arquitectura-.NET-paso-a-paso.aspx</link><pubDate>Thu, 12 Oct 2006 14:21:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:172873</guid><dc:creator>lopez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=172873</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2006/10/12/Jornadas-de-Arquitectura-.NET-paso-a-paso.aspx#comments</comments><description>&lt;p&gt;Las pr&amp;oacute;ximas dos semanas, cada mi&amp;eacute;rcoles estar&amp;eacute; en el &lt;a href="http://www.mug.org.ar/" target="_blank"&gt;Grupo de Usuarios Microsoft&lt;/a&gt; de Argentina, en Buenos Aires, dando unas charlas sobre Arquitectura .NET, explicando paso a paso cu&amp;aacute;l es la raz&amp;oacute;n, motivaci&amp;oacute;n y consecuencia de algunos patrones de arquitectura y dise&amp;ntilde;o, que aparecen en los desarrollos .NET. Creo que es una forma mejor de explicar esos temas, creando uno o m&amp;aacute;s ejemplos, que viendo cada patr&amp;oacute;n por separado. Son jornadas con costo, pueden ver m&amp;aacute;s informaci&amp;oacute;n en&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;a href="http://www.mug.org.ar/Eventos/2311.aspx"&gt;http://www.mug.org.ar/Eventos/2311.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Repito ac&amp;aacute; el contenido:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;font face="Verdana"&gt;Con la aparici&amp;oacute;n de .NET (en varias versiones), el framework y la posibilidad de hacer aplicaciones Windows, Web, distribuidas o no, con acceso a distintas bases de datos, se plantea el tema de como se estructura una aplicaci&amp;oacute;n .NET, de forma que sea extensible y mantenible. &lt;br /&gt;Los temas de arquitectura son varios, pero lo principal es repartir las responsabilidades en distintas partes del sistema.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Verdana"&gt;Durante el curso, partiendo de ejemplos que no tienen conceptos de arquitectura, veremos como surgen y para que sirven distintos patrones y estilos arquitect&amp;oacute;nicos, como la arquitectura de capas, el modelo de dominio, la independencia de la presentaci&amp;oacute;n de la l&amp;oacute;gica de negocios, la independencia de la base, y el problema y soluciones de persistencia.&lt;br /&gt;Tambi&amp;eacute;n se implementara, sobre un ejemplo, una implementaci&amp;oacute;n Windows Forms, vs. otra implementaci&amp;oacute;n ASP.NET. Luego, visitando alguna tecnolog&amp;iacute;a .NET como servicios web, se implementara una aplicaci&amp;oacute;n donde la presentaci&amp;oacute;n es remota del resto de la aplicaci&amp;oacute;n.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Verdana"&gt;DETALLES DE CONTENIDOS:&lt;br /&gt;&lt;br /&gt;&amp;middot; Un ejemplo sin Arquitectura.&lt;br /&gt;&amp;middot; Definici&amp;oacute;n de Arquitectura.&lt;br /&gt;&amp;middot; La arquitectura de capas.&lt;br /&gt;&amp;middot; Primera separaci&amp;oacute;n.&lt;br /&gt;&amp;middot; Presentaci&amp;oacute;n.&lt;br /&gt;&amp;middot; Resto del Sistema.&lt;br /&gt;&amp;middot; Patr&amp;oacute;n Service Layer.&lt;br /&gt;&amp;middot; Objetos para nuestro Negocio.&lt;br /&gt;. Entidades de Negocio.&lt;br /&gt;&amp;middot; Modelo de Dominio.&lt;br /&gt;. El problema de la persistencia.&lt;br /&gt;&amp;middot; Data Access Objects.&lt;br /&gt;&amp;middot; Object Relational Mapping.&lt;br /&gt;&amp;middot; Objetos en la presentaci&amp;oacute;n.&lt;br /&gt;. Value Objects.&lt;br /&gt;&amp;middot; Datos entre capas.&lt;br /&gt;&amp;middot; Capa remota.&lt;br /&gt;. Data Transfer Object.&lt;br /&gt;&amp;middot; Tecnolog&amp;iacute;as: Web Service, Remoting, Windows Communication Framework.&lt;br /&gt;&amp;middot; Independencia del Transporte.&lt;br /&gt;&amp;middot; Cambiando la presentaci&amp;oacute;n.&lt;br /&gt;&amp;middot; Ejemplo Windows.&lt;br /&gt;&amp;middot; Ejemplo Web.&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;font face="Verdana"&gt;Como siempre, la presentaci&amp;oacute;n y los ejemplos, quedar&amp;aacute;n en &lt;a href="http://www.ajlopez.com" target="_blank"&gt;mi sitio&lt;/a&gt;, en el material correspondiente al curso, cualquiera podr&amp;aacute; consultarlos.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;Es la segunda vez que doy esta charla en el a&amp;ntilde;o. Estoy pasando algunos apuntes a texto, y ser&amp;aacute;n publicados en mi sitio, porque creo que simplemente el c&amp;oacute;digo o la presentaci&amp;oacute;n, no alcanzan para transmitir las ideas y discusiones planteadas. Pasar&amp;eacute; en limpio lo que grabe de esta charla, con los ejemplos, y quedar&amp;aacute; publicado en varias p&amp;aacute;ginas, en lo que espero sea la primera implementaci&amp;oacute;n p&amp;uacute;blica de un curso, apunte m&amp;iacute;o, albergado usando &lt;strong&gt;ajlearning &lt;/strong&gt;, un sistema en PHP que estoy usando privadamente en mi sitio.&lt;/p&gt;&lt;p&gt;Ser&amp;aacute; la primera de estas experiencias a pasar a texto. Creo que es el formato ideal para que la gente interesada en ese tema, y que no pueda asistir, pueda tener algo del contenido explicado.&lt;/p&gt;&lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=172873" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Arquitectura/default.aspx">Arquitectura</category></item><item><title>Charlas sobre Generación de Código</title><link>http://msmvps.com/blogs/lopez/archive/2006/10/10/Charlas-sobre-Generaci_F300_n-de-C_F300_digo.aspx</link><pubDate>Tue, 10 Oct 2006 14:13:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:167369</guid><dc:creator>lopez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=167369</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2006/10/10/Charlas-sobre-Generaci_F300_n-de-C_F300_digo.aspx#comments</comments><description>&lt;p&gt;Los que asistieron a alguna de mis charlas, saben que llega el momento en el que presento, tanto tenga relaci&amp;oacute;n con el tema tratado como que no, a mi proyecto preferido, mi generador de c&amp;oacute;digo a partir de un modelo, &lt;a href="http://www.ajlopez.com/ajgenesis" target="_blank"&gt;AjGenesis&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Desde hace unos a&amp;ntilde;os lo vengo mejorando y probando, y me ha dado muchas satisfacciones. Lo uso en cada nuevo proyecto que encaro, as&amp;iacute; que estoy cumpliendo con la m&amp;aacute;xima &amp;quot;comerse la comida del perro&amp;quot; (que podr&amp;iacute;a entenderse, aplicado a programaci&amp;oacute;n, a que el desarrollador debe usar sus propios productos). Tanto el a&amp;ntilde;o pasado (2005) como en &amp;eacute;ste, he tenido la oportunidad de dar charlas solamente dedicadas al tema de generaci&amp;oacute;n de c&amp;oacute;digo con ese proyecto. Y ahora, vienen dos charlas, con las que estoy entusiasmado.&lt;/p&gt;&lt;p&gt;Una, el viernes que viene, en Buenos Aires, organizada por el &lt;a href="http://www.clubdeprogramadores.com" target="_blank"&gt;Club de Programadores&lt;/a&gt; (con costo), m&amp;aacute;s informaci&amp;oacute;n en:&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.clubdeprogramadores.com/cursos/CursoMuestra.php?Id=287"&gt;http://www.clubdeprogramadores.com/cursos/CursoMuestra.php?Id=287&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Otra, el .. de noviembre, en la ciudad de Santa Fe, aqu&amp;iacute; en mi pais Argentina. Tendr&amp;eacute; el gusto de volver a esa ciudad, donde hay un polo inform&amp;aacute;tico importante, promovido desde la actividad acad&amp;eacute;mica y apoyado por el gobierno. Organizado por el &lt;a href="http://www.mug.org.ar/" target="_blank"&gt;Microsoft User Group&lt;/a&gt; y la Universidad Tecnol&amp;oacute;gica Nacional; es gratuito, tienen informaci&amp;oacute;n en:&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.mug.org.ar/Eventos/2369.aspx"&gt;http://www.mug.org.ar/Eventos/2369.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Espero poder transmitir a los asistentes a esta charla, la idea que subyace a trabajar con generaci&amp;oacute;n de c&amp;oacute;digo, tanto con AjGenesis como con el utilitario que elijan, y en especial, destacar la importancia del modelo. A diferencia del concepto de &amp;quot;software factories&amp;quot; (aunque tiene sus puntos en com&amp;uacute;n), con AjGenesis se puede encarar la generaci&amp;oacute;n de artefactos de texto (no solamente c&amp;oacute;digo), desde un modelo, o de varios modelos. Por ejemplo, para entender la necesidad de m&amp;aacute;s de un modelo, en los ejemplos a presentar habr&amp;aacute; un modelo independiente de la plataforma (c&amp;oacute;mo es el sistema, las entidades y relaciones que maneja), y otro, dependiente de la plataforma (base de datos a usar, lenguaje, presentaci&amp;oacute;n web), que pueden combinarse. As&amp;iacute;, desde un modelo independiente de la plataforma, se puede generar la misma soluci&amp;oacute;n para PHP, para VB.NET, o para VB.NET con NHibernate. Se pueden generar c&amp;oacute;digo de capas, que cumpla con los patrones de Business Entities, Business Components, o que siga los lineamientos de Evans, con Entities, Repositories, Services, y una capa de Application y otra de Infrastructure.&lt;/p&gt;&lt;p&gt;O lo que venga ma&amp;ntilde;ana. El modelo independiente sigue estando, es cuesti&amp;oacute;n de adaptar las plantillas y procesos de generaci&amp;oacute;n, para que produzca lo que necesitamos, en la tecnolog&amp;iacute;a que precisemos.&lt;/p&gt;&lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=167369" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Arquitectura/default.aspx">Arquitectura</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Generaci_26002300_243_3B00_n+de+C_26002300_243_3B00_digo/default.aspx">Generaci&amp;#243;n de C&amp;#243;digo</category></item><item><title>How To de Arquitectura .NET</title><link>http://msmvps.com/blogs/lopez/archive/2006/07/17/104946.aspx</link><pubDate>Mon, 17 Jul 2006 14:20:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:104946</guid><dc:creator>lopez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=104946</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2006/07/17/104946.aspx#comments</comments><description>&lt;P&gt;El jueves 27 de Julio dictaremos con el &lt;A href="http://staff.southworks.net/blogs/matiaswoloski"&gt;Gran Woloski&lt;/A&gt; una charla (gratuita) de arquitectura en Microsoft de Argentina, en Buenos Aires. El temario del evento es&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;Tema: Programación en capas arquitecturas y patrones&lt;BR&gt;Fecha: 27 de Julio&lt;BR&gt;Horario: 9:00 a 13:00&lt;BR&gt;Lugar: Oficinas MS Buenos Aires, Bouchard e/Córdoba y Viamonte, Piso 4&lt;BR&gt;&lt;BR&gt;Con la llegada de .NET, se abrieron posibilidades de desarrollo, usando &lt;BR&gt;patrones y mejores prácticas. La amplitud del framework, las capacidades nuevas que &lt;BR&gt;tenemos, desde aplicaciones web hasta aplicaciones distribuidas hasta servicios windows, &lt;BR&gt;nos lleva a estudiar cuestiones de arquitectura: cómo se compone ahora una aplicación &lt;BR&gt;.NET? qué patrones y mejores prácticas podemos usar, con las herramientas actuales?&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;En esta charla, trataremos estas cuestiones.&lt;BR&gt;&lt;BR&gt;Arquitectura de Aplicaciones&lt;BR&gt;&amp;nbsp; Arquitectura de Capas&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Qué Capas?&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Qué poner en cada Capa?&lt;BR&gt;&amp;nbsp; Implementando la misma aplicación, con distintas presentaciones:&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Aplicación Windows&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Aplicación Web&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Aplicación Windows Remota&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Determinando el Transporte por configuración&lt;BR&gt;&amp;nbsp;Pasaje de datos entre capas físicas&lt;BR&gt;&amp;nbsp;&amp;nbsp; DataSet vs Objetos Tipados&lt;BR&gt;&amp;nbsp;&amp;nbsp; Web Services&lt;BR&gt;&amp;nbsp;&amp;nbsp; Remoting&lt;BR&gt;&amp;nbsp;&amp;nbsp; Windows Communication Framework&lt;BR&gt;&amp;nbsp;Modelado de Lógica de Negocio&lt;BR&gt;&amp;nbsp;&amp;nbsp; Patrón Service Layer&lt;BR&gt;&amp;nbsp;&amp;nbsp; Patrón Transaction Script&lt;BR&gt;&amp;nbsp;&amp;nbsp; Patrón Domain Model&lt;BR&gt;&amp;nbsp;Conceptos de Persistencia de objetos&lt;BR&gt;&amp;nbsp;Conceptos de Generación de código&lt;BR&gt;&amp;nbsp;Software Factories&lt;BR&gt;&amp;nbsp;&amp;nbsp; Que son las Software Factores de Patterns and Practices&lt;BR&gt;&amp;nbsp;&amp;nbsp; Smart Client Software Factory&lt;BR&gt;&amp;nbsp;&amp;nbsp; Web Service Software Factory&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;Espero que les guste, pueden inscribirse &lt;A href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032303111&amp;amp;Culture=es-AR"&gt;aquí&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Angel "Java" Lopez&lt;BR&gt;&lt;A href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/A&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=104946" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Arquitectura/default.aspx">Arquitectura</category></item></channel></rss>