Toda aplicacion de gestion cumple con un principio basico: Todas tienen datos, conectividad sobre estos y forma de visualizar, analizar, capturar, procesar, etc. la misma por los usuarios del sistema.
Visto, quizas de una manera simplista, desde la optica del usuario, son una suma de funcionalidades asociadas a datos que se interrelacionan para lograr un fin comun. Por ejemplo, un sistema contable se le presentara a los usuarios como pantallas de captura y reportes, listados de cuentas, de movimientos, de operaciones, etc. Cada una personalizada de acuerdo a las caracteristicas de los datos con los que trabaja y compartiendo todas, en el mejor de los casos el estilo de interfaz que resulta conveniente para facilitarle el aprendizaje del sistema al usuario, quedando resumido los sistemas de la siguiente manera:
Sistema = Modulo A + Modulo B + ... + Modulo N
Donde cada Modulo es:
Modulo X = (Datos X * Formularios X * Reportes X * Otros X)
y siendo:
Datos X = (Definicion X * Estructura X * Conectividad X * Interfaz de Datos X)
Definicion X, la definicion formal de los datos para el modulo X
Estructura X, la estructura de los datos X, que muchas veces no coincide con la definicion.
Conectividad X, la forma de conectarse con los datos X
Interfaz de Datos X, la forma de interactuar con los datos (generalmente comun, SQL)
Formularios X, la forma de visualizacion de los datos con las funcionalidades asociadas.
Reportes X, la forma de crear reportes o los reportes definidos en el Modulo X
Otros X, cualquier otra funcionalidad de datos que sea asociada al Modulo
En aras de brindar sencillez al desarrollo de explicaciones siguientes vamos a hacer notar que como Formularios X, Reportes X y Otros X son basicamente funcionalidades de X, mejor las denotamos como Funcionalidades X. quedando la ecuacion de la siguiente forma:
Sistema = Datos A*Funcionalidades A + Datos B*Funcionalidades B + ... + Datos N*Funcionalidades N
sustituyendo:
Sistema = Def. A * Est. A * Con. A * Intrfz. A * Func. A + Def. B * Est. B * Con. B * Intrfz. B * Func. B + ... + Def. N * Est. N * Con. N * Intrfz. N * Func. N
Que gano con esto?
Aun nada, pues como las Funcionalidades de cada Modulo son muy particularizadas a estos, no es posible simplificar mucho la ecuacion, pero, si en cambio puedo contar con un elemento Funcionalidades que sirva para cualquier Datos X, (lo que representaria contar con herramientas genericas) tendria...
Sistema = Func.*(Def. A * Est. A * Con. A * Intrfz. A + Def. B * Est. B * Con. B * Intrfz. B + ... + Def. N * Est. N * Con. N * Intrfz. N)
Asi mismo seria si pudiera contar con alguna forma de hacer lo mismo para otros componentes de la ecuacion, como por ejemplo la Conectividad de Datos y la Interfaz de Datos, cosas que ya se vienen haciendo desde siempre, quedando entonces:
Sistema = Func.*Con.*Intrfz*(Def. A * Est. A + Def. B * Est. B + ... + Def. N * Est. N)
Es claro que para que todos estos componentes de la ecuacion funcionen correctamente es necesario un conjunto de informacion que ellos no poseen y solo los modulos pueden brindar por lo que es necesario introducir un elemento en cada modulo, que sirva para describir como las funcioanlidades que han sido sacadas como elementos comunes, el elemento que se necesita es Metadata X, quedando la ecuacion:
Sistema = Func.*Con.*Intrfz*(Def. A * Est. A *Met. A+ Def. B * Est. B*Met. B + ... + Def. N * Est. N*Met. N)
Como el elemento Definicion X es inherentemente de definicion, descriptivo, este puede ser mezclado con el elemento Metadata X, ganandose en simpleza y efectividad.
Sistema = Func.*Con.*Intrfz*(Met. A * Est. A + Met. B * Est. B+ ... + Met. N * Est. N)
Ahora, en este ultimo sistema lo principal es contar con buenas herramientas de Funcionalidades, de Conectividad y de Interfaz de Datos, lo demas es definir y modelar y ya tendras un sistema listo para ser usado, extensible por naturaleza y adaptable a cualquier contexto.