Putting it together

by Luismi Cavallé

Eric Evans en su libro Domain Driven Design, se refiere a la mezcla de paradigmas en el modelado de dominios:

Mezclar paradigmas permite a los desarrolladores modelar conceptos particulares en el estilo que mejor se ajuste. Además, muchos sistemas deben usar infraestructura técnica no orientada a objetos, muy comunmente bases de datos relacionales. Pero fabricar un modelo coherente que abarque distintos paradigmas es difícil, y hacer que las herramientas que los soportan coexistan es complicado.

En mis actividades de desarrollo actuales tengo que tratar con el menos cuatro enfoques o filosofías de desarrollo diferentes (capa a capa): el paradigma relacional, la orientación objetos, la orientación a servicios y el modelado de procesos de negocio.

Esta variedad de paradigmas ofrece una capacidad expresiva formidable a la hora de modelar cualquier dominio. Aunque el coste es, además de la dificultad de mantener el modelo coherente, como comenta Evans, la complejidad asociada a la mezcla de filosofías—y sus tecnologías asociadas—, que no necesariamente se llevan bien entre si. Es justamente en los bordes, en los límites en los que se deja de utilizar un paradigma para utilizar otro donde aparecen los problemas de desadaptacion de impedancias que no siempre es trivial resolver.

Finalmente recurriremos a aquello de que desarrollar software es cuestión de elegir trade-offs. Y el coste asociado a salvar el gap entre paradigmas debe tenerse en cuenta cada vez que decidimos añadir una nueva capa de abstracción de este tipo.

Lo que sí parece claro es que en la era postmoderna los enfoques clásicos del estilo “todo son objetos”, “todo son tablas y relaciones”, “todo son servicios” o “todo son workflows” son en general incorrectos en el sentido de que el mundo real puede ser modelado de muchas maneras diferentes y algunas son más útiles que otras en determinadas situaciones y para solucionar determinados problemas.

Seguramente en saber escoger los paradigmas y las tecnologías adecuadas a las circunstancias y los problemas a resolver, y en saber ponerlo todo junto, encontrando las soluciones sencillas, reside una parte del secreto del éxito de un desarrollador.