Artefactos

En esta página, explicamos que son los artefactos que provee cooperator tanto como para trabajar con las entidades, como con el mapeo de las mismas a la base de datos. Los principales artefactos que tenemos son:

Objects:
Los Objects, son objetos que se mapean 1 a 1 con las tablas. Cada Object se persiste en un registro de una tabla. Cooperator Modeler agrega la palabra Object al nombre de la tabla para definir un Object.
De esta forma, por cada tabla que tenemos en nuestra base de datos, tendremos un objeto. Por ejemplo:
Tabla: Customer -> Clase: CustomerObject
Tabla: Orders -> Clase: OrdersObject
Tabla: Orders Detail -> Clase: OrdersDetailObject
Y podríamos hacer algo así:

Dim myCustomer As New CustomersObject()
myCustomer.CompanyName = “MyCompany”

ObjectsLists:
Los ObjectList son clases que nos sirven para agrupar objetos del tipo Object. Así como los Object se persisten en un registro, los ObjectList se persisten en varios registros de una tabla. También por cada tabla tendremos una clase ObjectList, por ejemplo:
Tabla: Customer -> Clase: CustomerObjectList
Tabla: Orders -> Clase: OrdersObjectList
Tabla: Orders Detail -> Clase: OrdersDetailObjectList
Ahora podríamos hacer algo así:

Dim myCustomer As New CustomersObject()
myCustomer.CompanyName = “MyCompany”
Dim myCustomers = New CustomersObjectList
myCustomers.Add(myCustomer)

Ó también podríamos recorrer todos los clientes dentro de la colección así:

For Each customer As CustomerObject In myCustomers
   

   

Next

Gateways (no se exponen):
Los Gateways son los objetos que proveen el mapeo básico de las tablas y los Objects. Esto quiere decir que también por cada tabla tenemos un Gateway. Estos artefactos no se exponen fuera del ensamble, por lo que no se pueden usar desde nuestra aplicación. Están ahí para ser usados por los Mappers, pero el programador no debería tratar con un Gateway.
¿Que es el mapeo básico? Pues cuando se necesita recuperar un Object desde la tabla, es el Gateway quien se encarga de traerlo. Así:

Dim myCustomer As CustomersObject = CustomerGateway.Instance().GetOne(22)

 

Y luego se persiste el objeto en la tabla asi:

 

CustomerGateway.Instance().Save(myCustomer)

Pero recordemos que los Gateways solo son usados por los mappers, y el programador de la aplicación no debería porque tener que usarlos.

Entities:
Las entities son las clases que representan las entidades de nuestro negocio. No se mapean 1 a 1 con las tablas, sino que una entidad puede persistirse en una o más tablas. Es sobre estos objetos sobre los que se debe trabajar para escribir las reglas de nuestro sistema. Las entidades heredan de Object, y pueden exponen propiedades que pueden ser colecciones de objetos o colecciones de otras entidades. También pueden exponer otras entidades u otro objetos. (Todo eso se define en el Modelador)
Por ejemplo, la entidad Order, hereda de OrderObject, por lo que hereda todas sus propiedades, pero además agrega una nueva propiedad llamada OrderDetailCollection que del tipo OrderDetailObjectList
De esta forma, para recorrer todos los renglones de una orden, se puede hacer algo así:

Dim OrderTotal As Decimal = 0
For Each myDetail As OrdenDetailObject In myOrder.OrderDetailCollection
    OrderTotal = OrderTotal + (myDetail.UnitPrice * myDetail.Quantity)
Next

EntitiesList:
Las EntitiesList son clases que representan colecciones de entidades. Así por ejemplo, si en nuestra aplicación está definida la entidad Order también tendremos una clase llamada OrderList, para poder almacenar en memoria una colección de entidades.

ListViews:
Los ListViews son colecciones muy parecidas a ObjectList o EntityList, (de hecho heredan de ObjectList), pero que además implementan la interface IBindingListView de .Net Framework. Esta interface tiene soporte para enlace a controles, y permite que al enlazar un ListView a una grilla por ejemplo, se pueda Ordenar, Filtrar, etc, sin escribir una sola línea de código.
En el ejemplo siguiente se muestra como obtener todos los clientes y enlazarlos a una grilla.

Private myCustomers As CustomersList

myCustomers = CustomersMapper.Instance.GetAll()
Dim myCustomersView As New CustomersView(myCustomers)
myCustomersView.Filter = “Deleted = false”
DataGridView1.DataSource = myCustomersView

Este código puede escribirse mucho mas resumido, lo hemos escrito en 4 líneas para mayor claridad. Bien, a partir de ahí se pueden editar los datos en la grilla y luego grabarlos así:

CustomersMapper.Instance().Save(myCustomers)

Notar aquí que se envía a grabar la colección original con la cual se creó el view. Esto significa, que si bien lo que se enlaza es el View, los datos se actualizan en el List original myCustomers

Mappers:
Los mappers son a las entidades, como los gateways son a los objects. Esto es, por cada entidad también tendremos un mapper que será el encargado de persistir nuestra entidad. Pero la diferencia entre los mappers y los gateways es que los gateways persisten datos en una sola tabla, mientras que los mappers pueden persistir las entidades en n tablas. Los mappers llaman internamente a los gateways para guardar dentro de una transacción todas sus composiciones.
Por ejemplo, para guardar una orden puedo hacer algo así:

OrderMapper.Instance().Save(myOrder)

Invocando el método Save del mapper, se realiza lo siguiente:

1) Se inicia una transacción
2) Se graba la cabecera de la orden
3) Se llama a OrderDetailGateways para que grabe los detalles
4) Se confirma la transacción

Todo eso se hace por la sola invocación del método Save del mapper, que fue generado por Cooperator Modeler para la entidad. Aquí cabe aclarar que los mappers no solo devuelven y persisten entidades, sino que también pueden devolver Object, según este definido en el modelo.
Esto es así debido a que los Gateways son privados, el programador no tiene acceso a los mismos ya que debe usar directamente los mappers. Como ya explicamos, hay Mappers que devuelven Objects y otros que devuelven entidades, y eso puede cambiar si se cambia el modelo y se genera todo el código nuevamente.

Wrappers:
Los Wrappers no son más que una clase que expone los mismos métodos que los Mappers pero como los mappers no se pueden instanciar, sino que se accede a ellos por medio del método Instance(), no se pueden usar en el enlace a datos con ASP.Net, ya que el control ObjectDataSource de ASP.Net 2,0 necesita un objeto que se pueda instanciar para llamar a los métodos que pueblen y graben el origen de datos. Si usted programa en Windows no debería tener porque usar los wrappers.

Loaders:
Los Loaders son artefactos necesarios al momento de implementar herencia sobre algún object o entity. Los Mappers permiten persistir entidades u objetos que hereden de algún otro, pero no existe forma de recuperar objetos heredados, recordemos que los Mappers son clases con tipo, pueden tratar un objeto como su clase base pero no a la inversa. Es por esta razón que los Loaders implementan todos los métodos de recuperación de objetos que brinda un Mapper determinado, pero, permiten indicar el tipo de retorno mediante generics.

Cooperator Modeler

One Comment en “Artefactos”


Los comentarios están cerrados.


Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

A %d blogueros les gusta esto: