DDD: La importancia del lenguaje ubicuo.

Programar no es acerca de instrucciones, sentencias, clases o estructuras. Programar es usar un medio, los lenguajes de programación, para poder reproducir un proceso que existe en el mundo real, al menos gran parte del software que usa en las empresas busca este propósito. Al trabajar con ideas y conceptos que son un subconjunto del mundo real es importante el tratamiento que se les da a las ideas que empleas para construir.

¿Qué es ubicuidad?.

Ubicuidad es un sinónimo  de omnipresencia, más allá de un significado religioso. Cuando se habla de lenguaje ubicuo quiere decirse que los conceptos y comportamientos están presentes en varios lugares dentro del ciclo de vida del proyecto. Sobre todo el lenguaje ubicuo debe estar presente en las mentes de los involucrados en el proyecto. Todos, no importa el nivel técnico, deben poder hablar con los mismos términos que se refieren a las mismas cosas desde la terminología del usuario, no del TI.

El lenguaje ubicuo construye puentes y destruye muros.

Frecuentemente, los proyectos en la empresa inician desde dos puntos. Primero, un dueño del problema requiere de una solución tecnológica, con su enfoque de alto nivel construye el requerimiento o una mera descripción de la problemática. Después, el equipo de desarrollo construye una especificación basada en lo que se entendió de la descripción, desde el bajo nivel. Es común que el equipo de desarrollo piense en lenguajes, frameworks, plataformas, bases de datos o infraestructura como primer paso. ¿Qué tan posible es que existan lagunas en el conocimiento del problema?, ¿qué tan posible es que el dueño del problema y el equipo de desarrollo vean las cosas distintas?, ¿qué tan posible es que la problemática sea más compleja de lo que se cree por ambas partes?. La respuesta a estas preguntas es: muy posible.

Rara vez hay una preocupación de los implicados por clarificar conceptos durante el desarrollo de un proyecto, esto implica que se deja a interpretación de cada persona lo que se supone que debe o puede hacer el sistema. Sin haber tirado una sola línea de código es posible encontrar fallos en el diseño, siempre es preferible dedicar tiempo a asegurarse que los conceptos fundamentales del problema a resolver se llaman igual y significan lo mismo en todas partes del subdominio del problema. Si todos hablan en los mismos términos, las reuniones de revisión, cambios, seguimiento o entrega van a ser definitivamente más fáciles.

El lenguaje ubicuo mejora la calidad del código.

Las ideas y los comportamientos del sistema son susceptibles a perderse en la codificación. No solamente hay que asegurarse  de que usas los mismos términos con las personas, las maquinas también deben de seguir esta práctica. Los conceptos de alto nivel plasmados en el requerimiento, en términos del usuario, deben de ser modelados de igual modo en la arquitectura de la solución. Teniendo fidelidad con las entidades y comportamientos empleados es fácil hacer cambios, también es fácil de  corregir. La legibilidad de un código en términos ubicuos permite que el programador gaste menos esfuerzo mental en resolver problemas derivados del mantenimiento. Si tu código se puede leer como prosa o un pseudo lenguaje de dominio cualquiera podrá dar mantenimiento, no solo el equipo original.

El lenguaje ubicuo previene malas prácticas.

El principal smell que se elimina cuando decides emplear términos ubicuos es la obsesión con los primitivos, al tener estructuras  de datos con mayor significado las puedes utilizar para construir las reglas de negocio o los algoritmos. También  permite reducir las dependencias porque es más sencillo diferenciar que es una política y que es un detalle. Las pruebas resultan más sencillas porque  es más claro definir cuáles son los caminos críticos para probar. Incluso se pueden encontrar fallos en la arquitectura o faltantes  en el conocimiento de la solución.

Autor imagen: Leon Riskin

Referencias:

Gustavo Sánchez
Últimas entradas de Gustavo Sánchez (ver todo)

Soy especialista en escribir software de calidad. Mediante el uso de marcos de trabajo, técnicas y automatización de procesos he podido reducir los costes operativos de los sistemas de la empresa. Sistemas confiables y adaptables producen clientes felices.