Pregunta para Alfredo Novoa

06/03/2007 - 22:30 por Eugenio Serrano | Informe spam
Voy a olvidar por un momento los insultos de los cuales he sigo objeto y
propongo un debate de arquitectura en donde todos podamos aprender. Voy a
plantear un caso simple para que todas las personas que leen esta lista
puedan seguirnos.

Imaginate que tienes 4 tablas en tu base de datos:

Clientes
Productos
Orden
DetalleOrden

Supongo que todo el mundo puede imaginarse la relacion entre dichas tablas.

Alfredo: En que lenguaje o como programarias el proceso de emision de una
nueva orden
de pedido ?


Regards / Saludos,
Eugenio Serrano
Microsoft MVP (ASP/ASP.Net)
Solid Quality Mentors
http://www.eugenioserrano.com.ar
if (me.today == me.yesterday) me.tomorrow = null;

Preguntas similare

Leer las respuestas

#26 Alfredo Novoa
07/03/2007 - 21:12 | Informe spam
On Wed, 7 Mar 2007 15:08:11 -0300, "Eugenio Serrano"
wrote:

Claro que hay codigo extra que no he puesto, ya que el mismo se genera
automaticamente, es decir no tengo que programarlo yo.



¿Has leido esto?

http://c2.com/cgi/wiki?CodeGenerati...esignSmell

Lo que he escrito es lo unico que tengo que programar yo, lo demas se genera
automaticamente.



En mi caso y en el de LinQ no hay necesidad de generar código.

Quiero saber todos los clientes que han comprado por lo menos un
artículo de cada durante este año.



Voy a cooperator Modeler, escribo el SELECT necesario y genero el modelo de
nuevo.Esto me genera el Stored Procedure en la base de datos y un Metodo en
el mapper que me devuelve una coleccion de los clientes que han comprado
por lo menos un articulo en el año. Solo con usar la herramienta me genera
tanto el procedimiento almacenado y el metodo en mi mapper para hacer la
consulta. Es decir, no tengo que escribir NADA mas.



Bueno, era un artículo de cada, pero es igual. Es decir que al final
quien resuelve toda la gestión de los datos es el SGBD, y Cooperator
Framework se parece un montón a usar DataSets tipados y es solo una
fina capa de comunicación dentro de las aplicaciones de presentación.

Por cierto, una vez por curiosidad se me ocurrió probar los datasets
tipados con una base de datos no muy compleja (un par de cientos de
tablas o así), y el VS2005 se me quedó cuajado varios minutos y me
generó más de 20 megas de código fuente (cientos de miles de líneas) y
más de 4 megas de código ejecutable que no hacía absolutamente nada, y
luego el IDE iba de pena. ¿Como resuelves eso?

Y para obtener esa informacion lo uso asi:

Dim misClientes as ClienteList =
ClienteMapper.GetClientesConMovimientos(2007)

Y listo, despues si quiere recorrer esos clientes hago asi:

For Each cliente As Cliente In misClientes
'Aqui hago lo que quiero con cada cliente..
cliente.Nombre
cliente.Edad
etc..
Next



No se para que podrías querer recorrer la lista. Si te traes todos los
datos ya masticados le enchufas la lista al grid o usas databindings y
listo. Para hacer databindings no hay ninguna necesidad de usar
datasets tipados ni colecciones de este tipo, te llega con una clase
genérica del estilo de DataTable, y te ahorras todo este follón y
engordar las aplicaciones con código que no aporta nada.

Sigo sin verle utilidad a todo esto, pero por lo menos no lo usas para
hacer las típicas atrocidades del OR Mapping. La gestión de los datos
la sigue haciendo el SGBD. Hacer estas consultas mediante código VB o
C# sería una locura.


Saludos
Respuesta Responder a este mensaje
#27 Alfredo Novoa
07/03/2007 - 21:21 | Informe spam
On Wed, 7 Mar 2007 15:08:11 -0300, "Eugenio Serrano"
wrote:

Aquí hay un documento interesante que también habla sobre los
problemas de la generación de código.

http://www.willydev.net/descargas/A...lexiva.pdf

Como es de esperar, cuanto más grande es el sistema, más problemático
es este enfoque.


Saludos
Respuesta Responder a este mensaje
#28 Eugenio Serrano
07/03/2007 - 21:21 | Informe spam
Que es esto ??

insert Clientes : tuple { Codigo codigoTextBox.Text, Nombre
nombreTextBox.Text }

Esto es pseudocodigo, no es C#, no es T-SQL

Sigo esperando un ejemplo concreto.

Regards / Saludos,
Eugenio Serrano
Microsoft MVP (ASP/ASP.Net)
Solid Quality Mentors
http://www.eugenioserrano.com.ar
if (me.today == me.yesterday) me.tomorrow = null;





"Alfredo Novoa" escribió en el mensaje de
noticias news:
On Wed, 7 Mar 2007 12:53:51 -0300, "Eugenio Serrano"
wrote:

Nos puedes decir en que lenguaje has escrito el ejemplo ?



Tutorial D

Y Como lo ejecutas ?



Tal cual lo puse.

Como le pasas los datos ingresados por el usuario ?



Por ejemplo:

insert Clientes : tuple { Codigo codigoTextBox.Text, Nombre
nombreTextBox.Text }

Pero lo normal es que use databindings y que sea mucho más simple.

DataSource(dataGridView) := Clientes;

Y con esto ya tengo conectado el datagrid a la varrel de clientes.


Saludos


Respuesta Responder a este mensaje
#29 Alfredo Novoa
07/03/2007 - 21:54 | Informe spam
On Wed, 7 Mar 2007 17:21:56 -0300, "Eugenio Serrano"
wrote:

Que es esto ??

insert Clientes : tuple { Codigo codigoTextBox.Text, Nombre
nombreTextBox.Text }

Esto es pseudocodigo, no es C#, no es T-SQL

Sigo esperando un ejemplo concreto.



Es Tutorial D y es un ejemplo concreto. Estoy trabajando en una cosa
como LinQ, pero mucho más elegante.

Si quiero hacerlo en C# haría algo así:

cmd.Parameters["@p_name"].Value = custName;
cmd.Parameters["@p_birthdate"].Value = dateOfBirth;
cmd.Parameters["@p_city"].Value = cityName;

cmd.ExecuteNonQuery();

Que es más o menos igual de engorroso que con Cooperator Framework.


Saludos
Respuesta Responder a este mensaje
#30 Eugenio Serrano [MVP]
07/03/2007 - 22:58 | Informe spam
Alfredo, gracias por responder:

Cuando tu escribes:

Es Tutorial D y es un ejemplo concreto. Estoy trabajando en una cosa
como LinQ, pero mucho más elegante.

Si quiero hacerlo en C# haría algo así:

cmd.Parameters["@p_name"].Value = custName;
cmd.Parameters["@p_birthdate"].Value = dateOfBirth;
cmd.Parameters["@p_city"].Value = cityName;

cmd.ExecuteNonQuery();

Que es más o menos igual de engorroso que con Cooperator Framework.


Saludos



Falta muuuchisimo mas codigo... eso es solo para una tabla...

La orden tiene una cabecera y un detalle... Necesitas escribir muuuucho mas
codigo, mucho mas que mi ejemplo usando Cooperator.

Ademas te falta el codigo para armar la conexion y para armar el comando...

Sigo sin ver el ejemplo completo...

Saludos, Eugenio Serrano
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida