Archive for the '8847' Category

Resultado de la VAN ALT.NET Hispano sobre Domain-Driven Design

Sunday, January 17th, 2010

Gracias a la comunidad de ALT.NET Hispano, he podido presentar el tema Domain-Driven Design, como anunciara hace un tiempo en:

ALT.NET Hispano VAN (Reunión Virtual): Domain-Driven Design

Y ahora, la comunidad se ha tomado el trabajo de escribir los principales puntos, y editar y publicar el video de la presentación y la charla. Pueden verlo en:

ALT.NET Hispano VAN 2009-12-19 Domain-Driven Design

En la presentación, comenté los principales puntos (DDD daría para varias horas), pero no fue sólo slides, sino que comentamos el código del proyecto: http://code.google.com/p/ndddsample

Como decía, DDD es un gran tema, que seguramente dará para más presentaciones en detalle, y más ejemplos de implementación. Por un lado, el uso de objetos y dominio estuvo desde temprano presente en el ambiente Java, pero por razones históricas, al llegar .NET no se hizo hincapié en el tema de armar un dominio, sino que se puso énfasis en los datos, más o menos directos.

Igualmente, el problema no es armar un dominio con objetos, sino llevarlo a una implementación exitosa, donde el dominio pueda convivir con tecnologías de todos los días, como bases de datos relacionales, concurrencia de usuarios, interfaces de presentación de distinto tipo, etc…. Por ejemplo, uno de los ejemplos de uso de dominio transparente, ha sido dado desde hace años, en el ambiente de la programación con Smalltalk. Pero hay que reconocer que esta tecnología no ha conseguido llegar al “mainstream” de desarrollo, y, en mi opinión, también se ha aislado de otros activos, como el acceso a base de datos y aplicaciones distribuidas.

Es aquí donde las ideas de Eric Evans y otros, abrieron la puerta para que hoy tengamos algunos patrones a adoptar o adaptar, para construir un dominio, e implementarlo de forma razonable, con lenguajes y tecnologías “mainstream”. Aún necesitamos varios artefactos para conseguirlo (me gustaría que fuera más simple, como en Smalltalk (no me olvido de mi post ¿Es tiempo de volver a la simplicidad?)), pero para un programador pragmático, las ideas de DDD tienen aplicación práctica.

Para mí, fue una feliz experiencia haber podido participar de este evento. Agradezco a todos lo que hicieron posible esto. Es notable lo que ha dado Internet y la Web en particular, para que podamos entre todos, compartir información, conocimiento, discutir opiniones, y aprender de cada uno algo. Y que las actividades como éstas, vayan quedando con “entregable”: no sólo una reunión, sino algo como resultado tangible.

Espero ir completando la página de la VAN con algunos enlaces más, pero veo que la gente de ALT.NET Hispano ha hecho un gran trabajo. Muchas gracias!

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

Arquitectura de capas en Domain-Driven Design

Saturday, September 13th, 2008

Esta vez, exploremos los conceptos de arquitectura en capas, tal como lo propuso Eric Evans en su libro clásico Domain-Driven Design, Tackling Complexity in the Heart of Software. En el capítulo cuatro del libro, Evans presenta este diagrama:

 

Evans Escribe:

En una aplicación de carga y envío de mercadería, para simplemente listar y seleccionar el destino de la carga de una lista de ciudades, debe haber código que (1) dibuje un control en la pantalla, (2) consulte una base de datos para obtener las posibles ciudades, (3) interprete el ingreso de usuario y lo valide, (4) asocie la ciudad seleccionada con la carga, y (5) confirme el cambio en la base de datos. Todo este código es parte del mismo programa, pero sólo una pequeña parte está relacionado con el negocio de envío de cargas.

El propone que el modelo de dominio resida en una capa, la Capa de Dominio. De esta forma, el modelo de dominio es protejido de los detalles técnicos, como la implementación de la persistencia, y los detalles de presentación. Me gusta decir que el dominio es un organismo, qe recibe estímulos, acciones desde el exterior,y reacciona a esos comandos. El dominio debería ejecutarse sin conocimiento detallado del resto de la aplicación. Serialización entre capas físicas, detalles de presentación, y acceso a base de datos, deben estar claramente separados de la implementación del dominio.

Las capas puede ser descriptas como:

UI (User Interface): la más fácil de entender, esta capa es la responsable de mostra información al usuario, y aceptar nuevos datos. Puede ser implementada para web, escritorio gráfico, o cualquier otra tecnología de presentación, presente o futura. Por ejemplo, podría ser una aplicación de voz, que interactúa con el usuario usando un teléfono. La prueba ácida para nuestro diseño es que un cambio radical en la interfaz de usuario debería tener mínimo (o por lo menos, controlado) impacto en el resto del sistema.

Application Layer: está a cargo de coordinar las acciones a ser realizadas en el dominio. No tiene reglas de negocio o conocimiento del dominio. No hay estado del negocio en esta capa. Delega todas las acciones del negocio al propio dominio. Podría coordinar varias acciones (posiblemente, en varios dominios). Preara la infraestructura para que esté lista a trabajar con el dominio en una acción específica (por ejemplo, preparando la transacción que vaya a usar).

Domain Layer: En esta capa reside el corazón del software, según Evans. Las reglas y lógica de negocio residen en esta capa. Estado de entidades de negocio y su conducta es definida y usada aquí. Comunicación con otros sistemas, detalles de persistencia, son delegados en la capa de infraestructura. Evans discute los patrones que él usa en esta capa, como Entities, Value Objects, Services, Repositories y Factories. Exploraremos esos patrones y sus implementaciones en futuros posts.

Infrastructure Layer: Dios y el diablo estan en los detalles, dice el dicho, y también en la capa de infraestructura. La principal responsabilidad de esta capa es la persistencia del estado de negocio, muy frecuentemente, usando una base de datos relacional.

Mi idea es tomar un ejemplo (posiblemente un dominio como uno del libro de Jimmy Nilsson), y desarrollarlo usando estas ideas, mostrando código concreto en Java y en .NET. En algún punto, discutiré sobre generación de código desde un modelo abstracto, pero no será el foco de esta serie de posts.

Fuentes consultadas:

Domain-Driven Design, Tackling Complexity in the Heart of Software, de Eric Evans.
Applying Domain-Driven Design and Patterns: With Examples in C# and .NET, de Jimmy Nilsson
.NET Domain-Driven Design with C#, Problem, Design, Solution, de Tim McCarthy. (Hay una sección en el blog de Tim dedicado a este libro).

Pueden bajar libremente

Domain-Driven Design Quickly

desde InfoQ.

Nos leemos!

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