Oslo y el Desarrollo Basado en Modelos

Miguel Llopis

January, 2009

This article was previously published in dotNetMania. dotNetMania is the most relevant magazine about Microsoft development technologies in the Spanish language.

Introducción

Durante la última Professional Developers Conference (PDC), celebrada a finales del mes de Octubre en Los Ángeles (California, EEUU), Microsoft desveló bastantes detalles acerca de algunas de las tecnologías más relevantes que la empresa de Redmond lanzará durante los próximos meses y años, algunas de estas novedades van dirigidas al gran público como por ejemplo Windows 7 y Office 14,  mientras que otras tienen como público objetivo los profesionales de la industria del software, en este segundo grupo podemos encontrar, entre otras, la nueva versión del lenguaje C# (C# 4.0), de .Net Framework (.Net 4.0) y del entorno de desarrollo Visual Studio (Visual Studio 2010). Al margen de estas nuevas versiones de “viejos conocidos” para los lectores de dotNetMania, nos encontramos con otras tecnologías completamente novedosas en el panorama del desarrollo sobre plataforma Microsoft, como son Windows Azure, un sistema operativo basado en servicios en la nube, y Oslo, la nueva visión de Microsoft para arquitecturas orientadas a servicios (SOA). Sobre esta última tecnología realizaremos un estudio general en este artículo.

Oslo y el desarrollo basado en modelos (Model-Driven Development)

Oslo es el nombre en clave para la primera oleada de tecnologías que constituirán la nueva plataforma de modelado de Microsoft, la cual permitirá la adopción de un paradigma dirigido por modelos en nuestros desarrollos.

¿Qué ganaremos adoptando MDD en nuestros desarrollos? Pensemos en nuestros desarrollos diarios y en la elevada complejidad de tareas como el análisis de procesos, su abstracción y la creación de aplicaciones que den soporte a los mismos. Se trata de una tarea complicada, puesto que involucra a diferentes roles dentro de la empresa (analista de procesos, arquitecto de software, desarrolladores, etc.), roles que además “hablan distintos idiomas” en la mayoría de los casos. Y sobre esta situación un tanto caótica, consideremos también tareas como la monitorización de nuestras aplicaciones una vez desarrolladas, la creación de planes de migración o de ampliación (escalado), las cuales involucrarían a otro rol fundamental en nuestra empresa: los IT Pros.

Hasta el momento, hemos tratado de mitigar el problema mediante el uso de modelos o abstracciones de esta realidad, diagramas de casos de uso, secuencia, colaboración, representaciones de la arquitectura de nuestras aplicaciones, diagramas UML… tan sólo por citar algunos ejemplos. Sin embargo, todos estos modelos no han dejado de ser una mera abstracción, un gráfico dibujado sobre el papel o almacenado en algún recóndito lugar de nuestro disco duro, y la complejidad de nuestros desarrollos crecía de forma directamente proporcional al número de modelos que empleábamos para representarlos, mientras que toda esta información permanecía aparcada, olvidada, cuando nos adentrábamos en la fase de desarrollo de nuestros proyectos.

Un enfoque que permitiría simplificar el proceso y aprovechar mejor esas ingentes cantidades de información representada en modelos sería disponer de un espacio común donde almacenar toda esta información relativa a nuestros proyectos, ser capaces de modelar dicha información haciendo uso de un nivel de abstracción que estuviera un escalón por encima del nivel actual, de modo que todos los roles técnicos y no-técnicos implicados en el proceso fueran capaces de comprender estos modelos, y además proporcionar una gran cantidad de herramientas intuitivas y adaptadas para cada uno de estos roles, de forma que todos ellos pudieran interactuar, modificar, consultar esta información y, en definitiva, comunicar de forma unívoca una misma verdad a través de diferentes idiomas. Oslo hace posible este enfoque.

Los tres factores clave en los que ganaremos considerablemente adoptando MDD son:

  • Transparencia: Al centrarnos en el uso de modelos que reflejen qué queremos conseguir, dejando un tanto de lado cómo conseguirlo (abstrayendo dicha tarea y dejándola en manos de capas inferiores) conseguiremos una mayor claridad a la hora de entender las aplicaciones que estamos construyendo.
  • Flexibilidad: Gracias al uso de herramientas visuales, cualquier persona podrá modificar en cuestión de segundos la lógica de nuestra aplicación, y dichos cambios serán automáticamente visibles para el resto de roles implicados en el proceso.
  • Productividad: Seremos capaces de alcanzar los mismos resultados, de una forma más simple y rápida. “Más esencia y menos ceremonia”.

La  adopción de un nuevo paradigma basado en modelos podría “asustar” a más de uno; no obstante, no se trata de una ruptura con los mecanismos que actualmente empleamos sino más bien una evolución natural de todos ellos. A lo largo de los últimos años, hemos podido observar una evolución en plataforma Microsoft hacia contenidos de tipo declarativo, una tendencia que se inició ya en tiempos de COM y el concepto de transacciones, y se ha visto confirmada en plataforma .Net de muy diversas formas, desde el uso de archivos de configuración (App.config) hasta el uso de XAML (un lenguaje de tipo declarativo) en WPF, pasando por la creación de contratos de servicio, etc. En el siguiente gráfico podemos apreciar dicha evolución hacia una creciente presencia de contenido declarativo en nuestros desarrollos, en línea temporal.

Adicionalmente, nos encontramos en plataforma Microsoft con algunas tecnologías que ya hacen uso de un concepto similar al de Oslo (DSL textual, diseñador visual y definición de la aplicación almacenada en base de datos). Tal es el caso de MOSS 2007, el cual hace uso de CAML como DSL textual, Sharepoint Designer como herramienta de diseño visual; y de Dynamics, con su lenguaje X++ y su diseñador MorphX.

Arquitectura de Oslo

Los elementos que componen la arquitectura de Oslo son fundamentalmente tres: un nuevo lenguaje para la creación de modelos (lenguaje M), una herramienta visual de modelado “para todos los públicos” (Quadrant) y un repositorio de tipo relacional donde podremos almacenar modelos (SQL Server).

El siguiente esquema representa el modo en que estos tres componentes básicos se relacionan entre sí, junto con los entornos de ejecución actualmente soportados por Oslo (Dublín, WCF/WFASP.NET, etc.). Cabe destacar que la comunicación entre componentes de Oslo y entornos de ejecución se realiza mediante el intercambio de información estructurada en XML, de modo que otros entornos de ejecución desarrollados por parte de terceros puedan ser fácilmente soportados en el futuro.

El lenguaje M

M es el nuevo lenguaje de modelado incluido en Oslo, es el lenguaje empleado para la descripción de los modelos almacenados en el repositorio. Se trata de un lenguaje de tipo declarativo que nos aporta la posibilidad de crear modelos y lenguajes específicos de dominio (DSLs) de forma textual.

Los modelos definidos con M permiten definir esquemas y también realizar consultas sobre dominios de datos estructurados. A pesar de que el propósito de este artículo no es ofrecer un análisis exhaustivo sobre el lenguaje M, es necesario puntualizar que la forma en que M se comunica con el repositorio es compilando estos modelos a T-SQL. No obstante, no deberemos confundir el propósito de M, más allá de ser un lenguaje de modelado, M no es una tecnología de acceso a datos como tal, ni mucho menos un reemplazo para T-SQL sino que se vale de T-SQL como tecnología subyacente para el acceso al repositorio. Por otra parte, tampoco M es un lenguaje orientado a objetos, carece de polimorfismo, métodos virtuales y otras características propias de este tipo de lenguajes OO.

El lenguaje M está en sí mismo implementado como DSL y, para ser estrictos, diremos que M no es tan solo un lenguaje de modelado, sino la base conceptual de una familia de lenguajes de modelado. Como “dialectos” fundamentales de M encontramos MSchema (permite la definición de modelos de datos específicos de un dominio), MGrammar (permite la creación de gramáticas para nuevos lenguajes) y MGraph (modelo abstracto de datos incluido en M).

Esta familia de lenguajes, como cualquier otra familia hoy en día, está predestinada a crecer en número, de modo que para cada uno de los entornos de ejecución previamente comentados tendremos un dialecto de M específico, así como una variante de Quadrant para el entorno visual. El siguiente cuadro recoge algunas de estas correspondencias.

Además de proporcionar esta familia de lenguajes, Oslo proporciona un entorno textual de desarrollo, Intellipad. Esta versión de Intellipad contiene una serie de extensiones que permiten un soporte completo para M y todos sus dialectos. Otra de las características de Intellipad es la posibilidad de traducir en tiempo real un dialecto de M a otro. La siguiente imagen muestra el aspecto de Intellipad con tres marcos, cada uno de ellos mostrando la definición de un modelo en uno de los dialectos previamente mencionados.

El diseñador Quadrant

A pesar de la potencia del lenguaje M, consideramos necesaria la existencia de un entorno visual desde el que construir modelos. Un entorno fácil de utilizar y disponible para cualquiera de los roles implicados en el proceso, roles técnicos y también roles no-técnicos.

Los modelos dibujados en Quadrant son automáticamente traducidos a lenguaje M y almacenados en el repositorio. Otra de las características fundamentales de Quadrant es la elevada capacidad de personalización en las vistas sobre un modelo, oscilando desde vistas genéricas hasta vistas personalizadas para cada rol, así como la posibilidad de crear “la vista ideal para la forma en que a Miguel le gusta interactuar con sus modelos”. Esta configuración personal constituye un modelo en sí misma y, como tal, se almacena en el repositorio de modelos. Oslo se modela a sí mismo.

La siguiente imagen muestra una captura de Quadrant en el modo de edición de un modelo de revisión de un proceso de RRHH para la contratación de un nuevo empleado.

El repositorio relacional de modelos

Proporciona un espacio estable y común a todos los roles para almacenar modelos. Como comentábamos previamente, este repositorio está implementado sobre una base de datos SQL Server 2008, beneficiándose de algunas de sus características (seguridad, clustering, replicación, servicios de reporting, etc.) y extendiendo algunas de éstas en escenarios concretos, con el fin de proporcionar un acceso seguro a los modelos pero también una alta flexibilidad.

Además, el repositorio incorpora una serie de modelos de referencia, los cuales representan algunos procesos de negocio habituales, así como escenarios de uso basados en tecnologías de Microsoft comunes. Estos modelos son extensibles por parte de los usuarios, quienes también podrán crear y almacenar sus propios modelos desde cero. El repositorio es capaz de almacenar esquemas representando modelos y también instancias de dichos esquemas, representando aplicaciones.

Oslo SDK: Primera CTP ya disponible

Tras el anuncio oficial de Oslo en el PDC, la primera CTP de la SDK de Oslo fue hecha pública y está disponible para descarga en el MSDN Oslo Developer Center [2]. Dicha CTP incluye todos los elementos descritos en este artículo con excepción del diseñador Quadrant.

En los próximos meses, nuevas versiones de esta SDK se harán públicas, y también dispondremos de una versión pública de Quadrant, herramienta que ahora mismo tan sólo está disponible para asistentes al PDC.

En posteriores artículos de dotNetMania, profundizaremos en el uso de esta CTP, así como en las características subyacentes de cada uno de sus elementos fundamentales, mostrando también algunos escenarios de uso de Oslo en los entornos de ejecución previamente citados en este artículo.

Adaptando de forma gradual nuestros desarrollos en .Net a Oslo

El objetivo fundamental de Oslo es convertir los modelos en una parte fundamental a la hora de crear, desplegar y administrar aplicaciones. En este contexto, entenderemos “modelo” como la representación abstracta de un proceso de negocio, de una aplicación o, incluso, de un flujo de trabajo.

Como hemos comentado al comienzo de este artículo, existe una tendencia natural en plataforma Microsoft hacia la adopción de modelos y también un incremento del contenido de tipo declarativo en nuestros desarrollos. Es por ello, que una adaptación gradual para la futura adopción del paradigma basado en modelos que Oslo propone, sería la adopción de tecnologías como WF, WCF, Dublín, etc.

Tan pronto como hagamos un buen uso de estas tecnologías y comprendamos las importantes ventajas que el uso de contenidos declarativos y modelos nos proporcionan en términos de productividad, transparencia y flexibilidad, la integración de Oslo en el ciclo de vida de nuestras aplicaciones será tan lógica y natural que echaremos de menos no haber podido realizarla mucho antes.

Bibliografía:

[1] Langworthy D., Lovering B., Box D. “The Oslo Modeling Language”, Addison-Wesley, octubre de 2008.

[2] MSDN Oslo Developer Center: https://msdn.com/oslo

[3] Microsoft Models Remixed: http://www.modelsremixed.com