Archive for the '1392' Category

El valor de TDD (Test-Driven Development) (1)

Saturday, July 5th, 2014

Siguiente Post

En estos últimos años he estado practicando deliberadamente TDD (Test-Driven Development) y trabajo en proyectos personales usando el flujo de trabajo de esta disciplina casi todos los días (ver mis posts de TDD y los commits en GitHub) Y también he trabajado en proyectos profesionales, con y sin TDD. Y luego de tanto código y proyectos, pienso que ya tengo un panorama de cuáles son los valores que agrega TDD a un proyecto que tenga desarrollo de software y cuáles son los problemas que podemos tener si no usamos TDD..

Primero, hay que recordar que un proyecto profesional puede ser más que programar código: he escrito que un proyecto BUENO es el que resuelve un problema (ver Un Buen Proyecto). No es solamente programar código, y menos programar código como nos parece o nos gusta. Lo importante es solucionar el problema que tiene quien nos contrata como equipo o como desarrollador individual.

Hecha esa aclaración ¿que es lo que vi de más valor siguiendo TDD, tanto en proyectos personales como profesionales? El primer punto de valor que veo como evidente, espero poder transmitirles el concepto, es:

TDD NOS EMPUJA A LA SIMPLICIDAD EN EL SOFTWARE QUE CONSTRUIMOS

Como cada vez que escribimos un test tenemos que pasarlo de rojo a verde con el código más simple, entonces esa simplicidad se va transmitiendo a lo que estamos construyendo.

Antes de seguir con el tema simplicidad, recordemos que no es sólo hacer TDD. Por ejemplo, tengo en gran importancia implementar casos de uso (ver TDD y Casos de Uso). Sin una serie de casos de uso a implementar, corremos el peligro de salirnos del carril y escribir algo que nos parece lindo, interesante, pero no soluciona el problema que tenemos que atacar en el proyecto.

Entonces, con TDD y guiado por los principales casos de uso, vamos diseñando un software. TDD es un proceso de diseño de software, no de escribir tests o de testing. TDD nos lleva a construir un software lo más simple posible, y los casos de uso nos guían hacia donde realmente esta el problema a resolver. Me gusta decir que aplicamos “baby steps”, hacia un diseño incremental de la solución (ver TDD y Baby Steps). No digo no hacer diseño de antemano: hago algo de diseño,  pero en la servilleta del desayuno, y apenas un poco. No pongo diseño imaginado en el código HASTA QUE NO LLEGUE EL TEST que lo amerite.

No olvidarse del otro importante paso: el refactor. Es ahí donde vamos a poner lo que conocemos para mejorar el código. Y es notable: TDD, como flujo de trabajo, nos va enseñando sobre diseño de código, de forma incremental. Al llegar un nuevo test, podemos ver que lo que habíamos escrito hasta entonces no sea lo óptimo, y refactorizamos la implementación interna. En este paso puede aparece la aplicación de patrones. Y eso es bueno: aparecen en un contexto, el de refactorización, no aparecen “del aire” o porque se nos ocurre a nosotros que hay que aplicar tal patrón. Recordemos que unos de los atributos de un patrón de software es el contexto donde se aplica. En la etapa de refactor podemos descubrir o poner de manifiesto ese contexto y ahí entonces reción aplicar el patrón. Si hacemos diseño de antemano, podemos caer (y lo he visto suceder) en la “patronitis”: agregar todos los patrones habidos y por haber, porque pensamos que son la mejor práctica. Hacer eso es una variante de “optimización prematura es la madre de todos los males”. Lo que nos va a enseñar TDD es que no hace falta pensar todo de antemano, rompiendo YAGNI. Lo que vamos creando con TDD en general va estar en “buena forma” para adaptarse a los nuevos casos de uso y nuevos tests que aparezcan.

Y aca esta el otro valor que agrega, paralelo a la simplicidad: no solamente el código va creciendo con la simplicidad necesaria, sino que tambien esta en su mayor parte ajustado a lo que nuestros tests piden, no a lo que nosotros queremos o imaginamos que necesita tener nuestro código. El diseño del software en construcción, de esta forma, es como la confección de un traje a medida, que va calzando perfecto en cada iteración a lo que necesitamos implementar.

Para que no todo sea cháchara en este post, pongo un ejemplo concreto, que ya he expuesto en otros posts (ver, por ejemplo, Desarrollando una Aplicación usando TDD). Supongamos que necesitamos devolver una lista de nuestros productos por categoría, digamos, en una API. ¿Qué hacemos en el controlador? He visto muchas veces que ya al primer test se le coloca un repositorio “mockeado” porque, claro, necesitamos el patrón repositorio ¿no?. Así nace la “paternitis”. NO: si somos consecuentes con el flujo TDD, lo más simple es ir entregando al controlador…. un LISTA DE PRODUCTOS. Solamente cuando tengamos más casos de uso, y veamos que la lista de productos la necesitamos en otros lados, vamos separando su existencia en otros componentes. He visto también que llegado al primer o segundo test, o aún antes, ya se está diseñando la base de datos para tener una tabla de productos y otra de categorías. Yo pregunto ¿quién, en qué el test, pidió eso? ¿qué test puso persistencia en el tapete? Muchas veces, NINGUNO. De nuevo, hay que ir implementando lo que nos pide el test, nada más, no hay que agregar nuestra propia “bajada de línea”, “ruptura de YAGNI”, como cuando pensamos “vamos a necesitar repositorio, vamos a necesitar persistencia” y entonces, necesitamos YA ponerlo y YA ponerlo como mock y así. Ese es el camino de romper la simplicidad de la que hablo.

De esta forma, el software que tengamos en construcción, crece como un organismo: de a poco, de forma controlada.

Seguiré con el tema del valor que agrega TDD, en los próximos posts: aumenta la calidad de código, permite la evolución y la adaptación al cambio, permite reducir la cantidad de bugs, permite arreglar los bugs detectados de forma más rápida, deja al proyecto en buena forma para que lo tomo otro equipo, etc.

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

 

ALT.NET Hispano Café: Más sobre la Inmortalidad de la Medusa

Saturday, August 21st, 2010

El viernes 6 de Agosto pasado, tuvimos un ALT.NET Café (evento virtual vía LiveMeeting) que anuncié en

ALT.NET Hispano Café: La inmortalidad de la medusa

Ya está publicado el evento en:

http://altnet-hispano.pbworks.com/cafe-2010-08-06-arquitectura

Ya tenemos planeado un nuevo evento de este tema, el próximo viernes, 27 de Agosto, a las 18hs (GMT) (15hs acá en Buenos Aires, Argentina). Según lo anunció el bueno de Martin Salias (@MartinSalias) en la lista de la comunidad ALT.NET Hispano:

El viernes próximo tenemos otra ronda sobre "La inmortalidad de la Medusa". Con el Maestro estuvimos charlando un poco y se nos ocurrió que podemos seguir un poco el tema que empezamos alrededor de la separación en capas, y complementando un poco el debate que iniciamos sobre todo alrededor del tema acceso a datos y su conexión con el modelo de dominio, podríamos charlar un poco de las alternativas desde allí hasta la interfaz externa (sea de usuario, servicios, etc).

Algo que me gusta revisar siempre es la idea de la Arquitectura Hexagonal de Alistair Cockburn (ahora más conocida como Ports & Adapters) donde nos sacamos de encima el modelo mental de datos-lógica-presentación, y pensamos en extremos que publican y consumen datos, con un core que los analiza o transforma.

Creo que cada vez más, con el ambiente de mash-ups, aplicaciones expuestas como servicio, multitud de clientes y dispositivos, etc, hay mucha tela para cortar alrededor.

Me gustaría saber qué les parece e ir delineando ideas durante la semana para charlarlas el próximo viernes.

El tema que menciona Martín lo pueden leer en:

Alistair Cockburn : Hexagonal Architecture

Mis enlaces de arquitectura, aplicaciones de ejemplo, etc:

http://www.delicious.com/ajlopez/softwarearchitecture

En el anterior post, mencioné el origen del nombre de estas charlas:

El nombre surgió porque la abuela de Martín siempre le decía: “No empezar a discutir sobre la inmortalidad del cangrejo” como diciendo evitar las discusiones interminables. Yo le retruqué con algun artículo en línea donde se afirmaba la inmortalidad de las medusas. De ahí, vean que cosa, surge el título de este ALT.NET Café.

Tienen acá un artículo sobre la inmortalidad de una especie de medusa, la Turritopsis nutricola:

Una medusa inmortal se extiende por todos los océanos de la Tierra

Artículos relacionados:

The curious case of the inmortal jellyfish
http://en.wikipedia.org/wiki/Transdifferentiation
http://en.wikipedia.org/wiki/Turritopsis_nutricula

Mis enlaces de biología:

http://delicious.com/ajlopez/biology
http://delicious.com/ajlopez/evolution

Lo mío es un apostolado 😉

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

ALT.NET Hispano Café: La inmortalidad de la medusa

Thursday, August 5th, 2010

A iniciativas del bueno de Martín Salías (@MartinSalias) mañana viernes tendremos una reunión virtual, un ALT.NET Hispano Café, gracias a la organización de la comunidad ALT.NET Hispano.

Pueden leer el “thread” donde se planeó la reunión en:

La inmortalidad de la medusa

Fue @JorgeGamba quien planteó inicialmente:

En la VAN de "Patrones de Implementación" con Martín Salías, volvió a surgir el asunto de hacer este tipo de reunión virtual que el mismo Martín describe así "esto debería ser un diálogo filosófico con el Maestro AJ López, pero los asistentes deberían tener a mano una ración de cicuta, por las dudas. 🙂 ", por supuesto, esto se refiere a temas de desarrollo de software.

Según entiendo, esto sería similar a las discusiones que ocurren al final de las VAN, en donde solo intervienen las voces de los interesados en expresar opiniones, por ejemplo, en la VAN sobre DDD<http://altnet-hispano.pbworks.com/van-2009-12-19-domain-driven-design>, hubo una discusión muy interesante entre Angel "Java" López, Martín Salías y Fabio Maulo sobre el patrón Repository, similares y su aplicación, pero parece que quedó inconcluso, si desean, pueden volver a escucharo en los
útlimos 17 minutos de la grabación en:

http://altnet-hispano.pbworks.com/van-2009-12-19-domain-driven-design

Si leen el thread, se plantearon varios temas de desarrollo, arquitectura y demás yerbas. Según comenta ahí Martín:

Me parece bien discutir esto e ir poniéndolo en el contexto de decisiones de arquitectura.

En principio no creo que haya UNA manera correcta de atacar el problema. Tiene que ver con la situación y el proyecto. Es probable que algunos de nosotros trabajemos en proyectos que son todos muy homogéneos y podamos tomar un estilo único de trabajo, mientras otros tendremos proyectos de todo tipo y color y tendremos que variar más seguido.

Podemos discutir en todo caso los pros y contras de cada estrategia y tratar de sacar en concreto una cierta guía de cuándo usar una u otra cosa, más al estilo de los patrones.

@JorgeGamba nos recuerda:

No olviden, mañana viernes 6 de Agosto tendremos este ALT.NET Café a las 18:00 UTC/GMT (meridiano 0), 15:00 de Argentina, 20:00 CET, por livemeeting http://snipr.com/virtualaltnet.

El nombre surgió porque la abuela de Martín siempre le decía: “No empezar a discutir sobre la inmortalidad del cangrejo” como diciendo evitar las discusiones interminables. Yo le retruqué con algun artículo en línea donde se afirmaba la inmortalidad de las medusas. De ahí, vean que cosa, surge el título de este ALT.NET Café.

La idea es charlar de los temas que nos interesa, a los que siempre volvemos, no hay un tema determinado.

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

Desarrollando aplicaciones en .NET

Monday, October 12th, 2009

En esta semana, comienzo a dictar el curso presencial que había anunciado en un anterior post:

Preparando un curso de .NET: aplicaciones, patrones y arquitectura

organizado por la gente del Microsoft Users Group de Argentina. 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 página de inscripción al curso.

El temario a desarrollar es ambicioso:

  • Arquitectura de aplicaciones .NET
  • Capas lógicas, capas físicas
  • El gran Service Layer
  • Persistencia
  • Object Relational Mapping
  • NHibernate, otros ORMs
  • Reglas de Negocio
  • Test-Driven Development
  • Rhino Mocks, Moq, otros
  • Inyección de dependencias
  • Spring Framework y otros
  • Separando responsabilidades
  • Conceptos de Autorización, Autenticación, y Seguridad Federada
  • Patrones en presentación: MVC, MVP, otros
  • Tecnologías de presentación: WinForms, ASP.NET, ASP.NET MVC, conceptos de WPF, Silverlight
  • Propuestas de Microsoft de Arquitectura
  • Modelo de Dominio
  • Domain-Driven Development
  • Desarrollo en equipo
  • Conceptos de Metodologías Agiles, XP, Scrum
  • Repositorio de Código
  • Integración Continua

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.

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.

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 Cursos y Seminarios: Ejemplos, Enlaces y Recursos, pero esta vez quisiera ir más lejos, y poner por escrito gran parte de lo que desarrollemos en el curso.

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.

(Tomé la imagen de este post de http://www.leansoftwareinstitute.com/blog/, creo que refleja la belleza y complejidad de construir software).

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

Preparando un curso de .NET: aplicaciones, patrones y arquitectura

Saturday, September 19th, 2009

Estoy preparando los temas y material, para un curso que dictaré en el Microsoft User Group de Argentina, en Octubre (seguramente quedará anunciado en el sitio del MUG). La idea es ir más allá de lo que ya dí en los cursos de .NET clásico (donde se muestra el framework, distintos tipos de aplicaciones), y un poco más extenso que el que ya dí sobre Arquitectura .NET.

Mi lista de temas (tentativo) a tratar, con ejemplos a desarrollar (tengo que ordenar los temas):

  • Capas lógicas, y el gran patrón: Service Layer
  • Capas físicas, Service Interface/Service Gateway
  • Object Relational Mapping
  • Domain-Driven Design
  • Test-Driven Development
  • Dependency Injection
  • Validaciones y Reglas de Negocio
  • Cambiando la presentación
  • Model View Controller, Model View Presenter y variantes (con distintas tecnologías de presentación)
  • Esas raras arquitecturas nuevas: aplicaciones distribuidas, grid computing, sharding, …
  • Tecnologías: WinForms, ASP.NET, ASP.NET MVC, ASP.NET Ajax, WPF (quizás Silverlight)
  • Herramientas y librerías: Moq, NUnit, NHibernate, VS Tests, Spring.NET, Rhino Mocks, …

y seguramente algún proyecto AjX… 🙂

Como siempre, lo que produzcamos en el curso, enlaces a ejemplos ya existentes, ejemplos armados para el curso, quedarán en mi sitio, en

Materiales de Cursos

Como no sé si me dará el cuero para tratar tantos temas, les pregunto por acá: Cuáles serían sus temas preferidos? Falta alguno que prefieran a éstos?

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

Videos de MVC Public Service Announcement

Friday, July 10th, 2009

No sé si van a aprender mucho de Model View Controller, pero se van a entretener: 🙂

MVC Public Service Announcement #1 – Controller Obesity

[View:http://www.youtube.com/watch?v=91C7ax0UAAc]

MVC Public Service Announcement #2 – The Importance of Tests

[View:http://www.youtube.com/watch?v=6wTeFqRnKds]

MVC Public Service Announcement #3 – Keeping Views Stupid

[View:http://www.youtube.com/watch?v=ku3QkWcPSEw]

MVC Public Service Announcement #4 – Staying RESTful

[View:http://www.youtube.com/watch?v=p30dcETXwD4]

MVC Public Service Announcement #5 : Outdated HTML

[View:http://www.youtube.com/watch?v=7gNPncWFdVg]

MVC Public Service Announcement #6 : Modularity

[View:http://www.youtube.com/watch?v=6eR3AZ5XPcs]

Son Gregg Pollack & Jason Seifer (http://RailsEnvy.com) junto a Adam Keys (http://FiveRuns.com)

Pueden encontrar más videos del usuario envyads

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez
http://facebook.com/ajlopez

ALT.NET Buenos Aires Primera Reunión

Sunday, May 10th, 2009

Ayer Sábado 8 de Mayo, se realizó la primera reunión de ALT.NET en Buenos Aires, en la sede de Microsoft Argentina (lindo lugar para reunirse, cómodo, cerca del centro de Buenos Aires). Yo no pude ir, estuve ocupado, principalmente con el curso de Hacer Historia.

Si quieren saber más sobre el movimiento ALT.NET

ALT.NET Argentina, ALT.NET Hispano, primera reunión en Buenos Aires

Veo que twittearon con el tag #altnetba

Leonardo Micheloni dejó fotos en:

http://mail.google.com/mail/#inbox/1212b072ea470400

Y el bueno de Luis Petek, uno de los sponsors AP Systems  también dejó sus fotos:

http://www.facebook.com/home.php#/album.php?aid=2022442&id=1044461328

 

Bueno, a ver si alguien postea y escribe y describe lo que pasó, cómo la vivió y demás…. Recuerden lo que no está escrito no existe… y no sean canutos, compartan con otros lo que vivieron, aprendieron y demás…  😉

Porque sino, sólo quedan las fotos, esto ya parece un fotolog de Cumbio… 🙂

Me perdí las pizzas de La Continental… 😉

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com/
http://twitter.com/ajlopez

Enjoying Pappo playing piano, Botafogo in guitar, third video Más blues con Pappo

Análisis de casos en Arquitectum.org

Friday, February 20th, 2009

El miércoles pasado asistí al Architect Forum de Microsoft de Argentina. Muy interesante tarde, gracias a los buenos de Ezequiel Glinsky y Juan Ladetto 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 www.architectum.org:

http://www.arquitectum.org

Pueden descargar las presentaciones (están como enlaces en cada título de tema) desde:

http://www.arquitectum.org/portal/Eventos/ArchitectForums/tabid/62/Default.aspx

Los casos presentados:

Renovación de plataforma en Despegar.com: experiencias y aprendizajes

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.

Oradores:

Carlos Granitto, Javier Canillas, Sergio Urin, Daniel Goldstein (Despegar.com)
Diego Gonzalez (Lagash)

Implementación de una arquitectura de alta escalabilidad  en el Mercado Abierto Electrónico (MAE)

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.

Oradores:

Diego Anfossi (MAE)
Gastón Real (Baufest)

Eficiencia, Seguridad y Compliance A-la-Carte en Banco Comafi

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.

Oradores:

Rafael Utrero (Comafi)
Mariano Baldineli (Comafi)
Martin Iglesias (Globant/Accendra)

Visiten el sitio

http://www.arquitectum.org

donde van a encontrar material de otros eventos, anuncios de los que se vienen en marzo, y noticias relacionadas.

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com/
http://twitter.com/ajlopez

"Ver la luz" con generación de código y AjGenesis

Tuesday, June 10th, 2008

Ayer dí una charla gratuita sobre generación de código, usando AjGenesis. 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.

Quisiera enumerar algunos posts relacionados con el tema, y comentarlos, así como enumerar enlaces y recursos.

Posts sobre generación de código

Sobre la generación de código

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.

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.

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.

Generando Código- Hello World con AjGenesis

Esta es la “prueba ácida” de todo generador de código. Si una herramienta de ese tipo no nos ayuda a crear programas “Hola mundo”, 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.

Generando aplicaciones con AjGenesis

Un post algo viejo, pero que muestra cómo se pueden generar aplicaciones no triviales con esta herramienta.

AjGenesis- Modelo generado desde los assemblies
AjGenesis- Modelo desde la Base de Datos

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.

Generando código para NHibernate (Parte 3)
Generando código para NHibernate (Parte 2)
Generando código para NHibernate (Parte 1)

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 del valle Rodríguez, se desarrollaron templates para usar NHibernate, y generar hasta una capa de presentación web para probar lo generado.

Hacia el AjGenesis Recipes

Es un trabajo en progreso, para incorporar interacción con el usuario durante el proceso de generación de código.

Usando AjGenesis y NAnt

Explicación y enlaces para usar AjGenesis desde NAnt. Si alguien necesita una interfaz gráfica NAnt-GUI, pueden bajarla desde NAnt-GUI (preparado por Carlos Marcelo Santos, del grupo de generación de código)

Genesis Studio- una IDE para AjGenesis

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:

http://www.codeplex.com/ajgenesisstudio

Preservando código en AjGenesis

Si necesitan generar código, pero luego modificarlo, pueden usar algunas capacidades de AjGenesis para delimitar qué parte regenerar y cuales conservan.

Code Generation as a Service

La última adición al AjGenesis: ahora pueden generar código usando una interfaz web. Esto permite que 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.

Más posts sobre AjGenesis en

AjGenesis

Si necesitan pasarle información a alguien que no maneja el español, pueden probar con mis artículos en “Anglish” (Angel’s English):

http://ajlopez.wordpress.com/category/ajgenesis

Enlaces

EL sitio sobre generación de código es

http://www.codegeneration.net

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).

Otros enlaces que tratamos en las charlas son:

CodeSmith Tools

MyGeneration Software

AndroMDA.org – Home

Mantengo todo tipo de enlaces relativos a generación de código en

http://del.icio.us/ajlopez/codegeneration

 

Lista de correo sobre generación de código

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.

Pueden ver los mensajes y suscribirse, en:

http://groups.google.com/group/codegeneration

Conclusión

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 “must” que me parece el primer paso para separarnos de los problemas de cambios en las tecnologías, herramientas y plataformas.

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.

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.

Como ven, con AjGenesis, ¡sky is the limit! 🙂

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com/

LINQ y Arquitectura de Capas

Wednesday, March 12th, 2008

Gracias a un email de Pablo Constantini tengo estos enlaces sobre el tema: ¿cómo encaja LINQ en una arquitectura de capas?

Using Linq in a Multi-Tier ASP.NET application
http://eliasbland.wordpress.com/2008/02/08/a-pattern-for-using-linq-to-sql-in-a-multi-tier-environment/

LINQ to SQL and the “Request-scoped DataContext” Pattern
http://blogs.vertigo.com/personal/keithc/Blog/Lists/Posts/Post.aspx?ID=11

Enterprise Application Architecture with LINQ to SQL
http://www.codeproject.com/KB/architecture/EnterpriseApplicationArch.aspx

Data Retrieval and CUD Operations in N-Tier Applications
http://msdn2.microsoft.com/en-us/library/bb546187.aspx

Other resources
http://msdn2.microsoft.com/en-us/library/bb882661.aspx
http://www.compiledmonkey.com/linq-in-an-n-tier-architecture

Para mí, LINQ con SQL nos sirve para programar el acceso a datos. Las “entidades” 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 “mostrar datos de tablas” y actualizarlos, o si necesita una lógica de negocios y un modelo de dominio más complejo.

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com/