Cooperator framework

19/06/2006 - 18:25 por Daniel A. Calvin | Informe spam
Amigos, les cuento que hace unos meses empezamos a trabajar con un grupo de
amigos en un proyecto para crear un framework que saque provecho de las
ventajas de .Net 2.0
La idea original fue de Eugenio Serrano y me invito a trabajar junto a el y
otros amigos.
El proyecto es un framewok de desarrollo, seguramente estarán pensando: otro
más :-)
Nos decidimos a hacer este nuevo con la idea principal de que sea bien facil
de usar y de acercar los objetos a mas gente de una forma facil.

Hemos trabajado con mucha energía estos últimos meses y hemos logrado armar
algo muy interesante según nuestra opinion.

Los objetivos que nos planteamos fueron:

- 100% Orientado a objetos
- Aplanar la curva de aprendizaje y facilitar el camino de quienes aún están
condicionados por el modelo relacional.
- No usar datasets
- No usamos reflection.
- Modelo totalmente tipado, esto significa que las clases de persistencia y
recuperacion de objetos devuelven un tipo especifico y no un tipo object.
- Debido a la potencia de VS2005 se pueden bindear estos objetos a los
controles sin escribir una linea de codigo, y aporvechar las venjas de
edicion de VS2005
- No depende de la estructura relacional, soporta cualquier tipo de
estructura de base de datos.
- No hay que modificar la Primary Key o crear un campo unique en las tablas.
- Usa stored procedures.
- Soporta concurrencia
- Las condiciones de busqueda se expresan mediante objetos específicos
tipados y extendibles por el programador que terminan ejecutando un Stored
Procedure en forma transparente.
- En la capa de negocio todo se expresa en términos del dominio, incluido
los filtros y busquedas.
- Genera código en base a scripts escritos en el lenguaje que prefiera el
programador. Por defecto estan en c#, pero puedo escribir un script en c#,
para generar código SQL, o puedo escribir un script en vb.net para generar
código c#.
- Hay un modelo propuesto de las clases que se generaran que se basa en el
modelo de datos, pero el programador, antes de generar las clases edita
dicho modelo en una herramienta muy facil de usar y define como sera el
modelo que desea crear.
- Si las opciones de modelado que provee la herramienta no alcanzan, el
programador puede editar los templates y generar su propio modelo.
- La herramienta de generacion, genera 2 archivos por cada clase usando
clases parciales pensado para que el programador solo modifique una de las
2.
Si mas tarde se agrega un nuevo campo a una tabla, se puede volver a generar
el otro archivo de manera de no "pisar" cualquier codigo que el programador
ya haya escrito en esa clase.
- Soporta transacciones desconectadas.
- Licencia tipo open source, aún no hemos optado por cual, pero será de
código abierto.

Todo esto lo logramos de forma poco invasiva, implementando interfaces y
valiendonos de las nuevas características del net framework 2.0, sobre todo
Generics y clases parciales.

El framework será publicado en un término no mayor a 60 días.

Nos gustaría mucho contar con algún retorno por parte de la comunidad,
principalmente que cosas les molesta de otras herraminetas de este tipo,
incluso que les gustaría tener y aún no han encontrado en otros frameworks.

Desde ya muchas gracias

Daniel Calvin

Preguntas similare

Leer las respuestas

#81 Eugenio Serrano
22/06/2006 - 10:01 | Informe spam
Hola koldo, intentare explicar un poco:

Los datasets son objetos que representan Tablas, Filas, Columnas,
Relaciones, etc.
Los datasets sin tipo, son objetos genericos que soportan cualquier tipo de
tablas.
Existen tambien Dataset tipados (Typed Dataset), que es otro objecto que
hereda de Dataset pero que esta personalizado para tus propias tablas. Por
ejemplo, en vez usar algo asi MiDataset.Tables(0), puedes referirte a
MiDataset.ClientesDataTable
Bien, ahora supone que tienes que representar una Factura. En ese caso si lo
representas con un dataset necesitas un dataset que tenga 2 tablas (que puede
ser tipado o no), pero que tenga 2 tablas al menos. Una tabla donde guardas
la cabecera de la factura (Fecha, TipoComprobante, NumeroComprobante, etc) y
otra tabla donde guardas el detalle de la factura. (Los renglones que tiene
tu comprobante)

El problema que nosotros vemos a los datasets, es que contien cantidad de
objetos que no tienen mucho que ver con la factura en si. (El dataset es un
objeto que tiende dentro cantidad de propiedades para representan las tablas,
filas, columnas, relaciones, etc)

Ahora, que tal si tu tienes una objeto Factura, que solo tiene los datos de
la factura, incluyendo una propiedad que es una coleccion donde se
representan todos los renglones, esa clase intenta representar una Factura y
no tablas donde guardo los datos de la factura (como sucede con los
datasets). De esta forma podrias hacer algo asi:

'Creo un objeto del tipo factura
Dim miFactura as Factura

'Obtengo de la base de datos, la factura.
miFactura = FacturaMapper.GetOne(2,"0001-00003454")

'Aclaro que el objeto FacturaMapper (que ha sigo generado automaticamente) ,
ya sabe que debe devolver un objeto del tipo Factura, y que ademas, ya sabe
que para crear ese objeto debe consultar 2 tablas en la base de datos. (La
cabecera y el detalle)

'Ahora puedo hacer algo asi:
Dim PrecioRenglon as Decimal
Dim ImporteFactura as Decimal
PrecioRenglon = miFactura.Renglones(2).Importe
ImporteFactura = miFactura.Total

'Si en esta ultima linea, te confundes y escribes por ejemplo Tutal, en vez
de Total, tu codigo no compilará, ya que la clase es totalmente tipada. Esto
quiere decir que propiedad tiene un tipo especifico. Lo mismo pasaria si
hubieramos declarado ImporteFactura as String, no compila porque
miFactura.Total es del tipo Decimal.

Nosotros creemos que esta forma de representar tus entidades de negocio es
mas claro que los datasets. Ademas en los datasets se crean cantidad de
objetos en memoria que nunca usas. Y esos objetos consumen tiempo para
crearse y espacion en la memoria.
Con Visual Studio 2005, tienes la posiblidad de enlazar los objetos a los
controles, y en nuestras pruebas, hemos conseguido llenar por ejemplo, un
grid con objetos mucho mas rapido que con Datasets (Y eso tiene mucho sentido
por lo que te decia al principio, los dataset te crean cantidad de objetitos
dentro que consumen recursos)

Hay muchisima gente que no le gusta programar asi, y la respeto. Yo he
programado cantidad de años de esa forma, y tengo sistemas funcionando que
estan programado de esa forma.
Los que programan asi, en su cabeza siguen pensando en un modelo centrado
en datos, que es totalmente valido.
Nosotros intentamos pensar las entidades como objetos. Cuando pienso en una
factura pienso en una entidad, (no en las tablas donde esta guardada)

Ni un modelo es mejor que otro, son solo diferentes formas de ver las
cosas... Cada modelo tiene venjas y desventajas.

Las ventajas de trabajar con objetos, es que a nivel de codigo es todo mucho
mas facil y natural, puedes solucionar problemas mas complejos de una forma
mas natural y mas rapido, pero el problema que tienen es que hay una
impedancia entre este modelo y el modelo relacional. Esto es, nuestro objeto
Factura, que en memoria es UN SOLO OBJETO, en las tablas son DOS TABLAS.

Con Cooperator Framework, intentamos solucionar los problemas de persistir
nuestros objetos en una base de datos relacional como SQL Server y hacerle la
vida mas facil a quien quiera usar la programacion orientada a objetos en sus
sitemas.

Saludos,
Eugenio Serrano
#82 Eugenio Serrano
22/06/2006 - 10:48 | Informe spam
Alfredo, hombre, habia jurado no contestarte mas, pero no he podido contenerme.

Despues de terrible lio que has armado en este post, terminas desdiciendote,
asegurando que jamas usarias LINQ en un sistema profesional ??
Y donde lo usarias ? Para jugar en tu casa ?

Creo que simplemente haces aguas por todos lados y no haces mas que
confundir a la gente

Si quieres que discutamos con respeto, sin insultar (diciendo por ejemplo,
que lo nuestro es basura), con gusto abrimos otro thread donde expongamos las
ventajas y desventajas de los 2 modelos. Creo que puede ser provechoso para
todos. Pero participare solo si no nos faltas el respeto.

Saludos,
Eugenio Serrano





"Alfredo Novoa" wrote:

Mostrar la cita
#83 Eugenio Serrano
22/06/2006 - 11:11 | Informe spam
Lo pasas bomba porque no han dicho que lo tuyo es una basura
:-))

A mi me gustan las discusiones, siempre que se hagan con respeto y sin
descalificar a nadie, y con argumentos. Diciendo, eso esta mal por tal y cual
cosa y no diciendo, eso no sirve porque lo digo yo.

Ahi le he propueso hacer un debate a Alfredo siempre que se haga con
respeto, espero que lo acepte asi todos lo aprovechan.

Saludos,
Eugenio Serrano


"sharpman" wrote:

Mostrar la cita
#84 Alfredo Novoa
22/06/2006 - 11:12 | Informe spam
On Thu, 22 Jun 2006 01:48:02 -0700, in microsoft.public.es.desarrollo
you wrote:

Mostrar la cita
No te enteras de nada, me refería a almacenar la información en el
código fuente usando cadenas literales como:

string[] cities = { "London", "Amsterdam", "San Francisco","Las
Vegas", "Boston", "Raleigh", "Chicago", "Charlestown", "Helsinki",
"Nice", "Dublin" };
#85 Esther Rodriguez
22/06/2006 - 12:21 | Informe spam
Mostrar la cita
Entonces podría ser que muchos se han equivocado de foro. Para mi un grupo
es una fuente de información y conocimiento, un sitio donde se pueda debatir
las ideas. Un sitio donde uno se limita a insultar y echar tierra sobre el
trabajo de otros solo porque no coincide con su punto de vista y lo que es
peor, no tiene los conocimientos suficientes como para demostrar lo que
dice, para mi no es entretenido, sino es una pérdida de tiempo. Para esa
clase de cosas hay programas en la televisión como Gran Hermano, Aquí hay
Tomate y toda la basura que echan en Tele 5 y Antenna 3.
Ads by Google
Search Busqueda sugerida