# CodeGear ECO

CodeGear ECO (abreviación para Enterprise Core Objects™) es una Model Driven Architecture implementado por la compañía CodeGear.

## Características

Está diseñado para incrementar significativamente la productividad de los desarrolladores proveyéndoles las siguientes facilidades:
* Mapeo Relacional-Objeto para persistencia de objetos del dominio.
* UML modelado de las clases del dominio.
* Ejecución de Máquinas de Estado para modelar comportamiento en notación UML.
* OCL como una manera de hacer consultas (en-memoria o a una BD).
* Transacciones en memoria y funciones de deshacer/rehacer.
* Facilidad de atar con la capa de IU por el soporte atar datos de .NET.
ECO está dirigido al .NET Framework y es vendido como parte de los entornos de desarrollo de CodeGear como pueden ser C# o Delphi.

## Modelando

Un verdadero entorno de modelado model driven es una parte central de una aplicación ECO. El desarrollador altera el modelo y los cambios son aplicados automáticamente a la implementación subyacente. Esto permite a los desarrolladores concentrarse en modelar el problema del dominio en lugar de atorarse en implementaciones específicas.
En particular no hay necesidad de preocuparse del diseño de la base de datos que hacen las aplicaciones ECO más objeto relacionales y menos orientado a bases de datos. La construcción del modelo en ECO se hace en un editor visual de UML. El código correspondiente es generado al vuelo en cualquiera de los lenguajes C# o Delphi.NET.
Hay dos tipos de modelos soportados por ECO: diagramas de clases y diagramas de estados. Los diagramas de clase son usados para definir una descripción estática de un sistema. Por otro lado los diagramas de estado describen posibles estados de un objeto y las transiciones entre ellos. Estos diagramas de estado describen aspectos del comportamiento de un sistema.

## Persistencia de objetos

ECO se encarga del mapeo objeto relacional basado en metadatos los cuales son tomados del modelo o un archivo xml. Este implementa tales características de persistencia para objetos avanzada como caching, carga floja y otras. El esquema de mapeo es suficientemente configurable para usar ECO con bases de datos existentes. El asistente de ingeniería inversa para bases de datos como una parte de ECO ayuda con esta tarea.
Desde que ECO mantiene la pista de todos los cambios no grabados de los objetos es fácil propagar estos cambios en el almacenaje de persistencia:
Y es simple de cargar algunos objetos desde el almacenaje de persistencia:
Aquí usamos la expresión OCL "Person.AllInstances". Sigue leyendo para ver de qué se trata.

## Object Constraint Language

OCL es a menudo referido como un análogo de objetos para SQL. Y de hecho es bastante conveniente hacer consultas OCL en términos de objetos. Por ejemplo la siguiente expresión obtiene los empleados de la compañía con más de 30 años: "company.employees->select(age > 30)". Originalmente fue propuesto por la OMG como un significado de describir relaciones en modelos UML. Pero actualmente el área de uso de OCL es más de par en par.
En ECO OCL es usado para expresar:
* Consultas a la base de datos.
* Consultas en memoria.
* Evaluación de expresiones para miembros de clases derivadas.
* Relaciones.
Utiliza su propio editor OCL con revisor de sintaxis y asistente de expresiones. Esto hace la escritura de expresiones OCL en ECO fácil y seguro.
Desde que OCL es un lenguaje libre de solo efecto, este no permite hacer cambios a un sistema. Esto es por lo que el equipo de ECO llegó con una extensión para OCL llamada EAL (ECO Action Language). EAL hace posible los cambios de los miembros de los objetos, para llamar métodos y aparte para crear nuevas instancias de objetos. A veces práctico escribir efectos disparadores de máquinas de estado o un método de clase con EAL en lugar de usar el lenguaje estándar de C# o Delphi.NET.

## Interfaz de usuario

Contiene componentes para facilitar el enlace de los controles de la interfaz de usuario a los objetos de dominio. Estos componentes son llamados handles. Hay diferentes tipos de handles en ECO. Uno de los más útiles es el expression handle el cual permite llenar los controles de interfaz de usuario con los resultados de una expresión OCL. Por ejemplo es posible mostrar toda la gente que contiene en su nombre "John" por un handle con la siguiente expresión: "Person.AllInstances->select(fullName.sqlLike('%John%'))".
Utilizando la arquitectura de atar datos.NET ECO permite atarlos a cualquier control.NET incluyendo componentes visuales de terceras-personas. Hay algunos ejemplos de como usar ECO con algunas librerías de componentes de interfaz popular.

## Conclusión

CodeGear Enterprise Core Objects™ es todo en uno para el desarrollo empresarial. Este une un framework ORM, una herramienta de modelado UML con generación de código instantánea, evaluador de expresiones OCL y otras facilidades extremadamente útiles.