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

#11 Alfredo Novoa
07/03/2007 - 18:04 | Informe spam
On Wed, 7 Mar 2007 12:41:46 -0300, "Eugenio Serrano"
wrote:

Para emitir una orden, el código quedaria algo mas o menos asi...
(Obviuamente que deberia cargar la orden desde una interface de usuario,
pero este codigo emite una orden con 2 renglones)

'Primero creo un nuevo objeto Orden.
Dim miOrden as Orden = New Orden()
miOrden.Cliente = New Cliente(22)
miOrden.Fecha = Now

'Luego creo un renglon
Dim miRenglon as OrdenDetalle = New OrdenDetalle()
miRenglon.Articulo = New Articulo("1001")
miRenglon.Cantidad = 2

'Y otro renglon mas
Dim miRenglon2 as OrdenDetalle = New OrdenDetalle()
miRenglon.Articulo = New Articulo("2001")
miRenglon.Cantidad = 3

'Agrego los renglones al objeto Orden
miOrden.Detalles.Add(miRenglon1)
miOrden.Detalles.Add(miRenglon2)

'Y ahora mando a grabar la orden con sus renglones a la base de datos
'Como mi objeto Orden es una entidad de negocio, el mapper me hace los
inserts en las 2 tablas dentro de una misma transaccion

OrdenMapper.Insert( miOrden)



O sea que todo este rollo solo sirve para generar 3 inserts en SQL, y
además no has puesto el código de las "clases de negocio", que seguro
que no es poco.

A partir de aquí todas las reglas de negocio tendrán que ser
aseguradas por el SGBD. Como por ejemplo que exista un artículo con
ese código, que exista un cliente con ese código, que la cantidad sea
mayor que cero, y también tiene que controlar las transacciones y la
concurrencia.

Eso es todo.



Eso es todo lo que puede hacer Cooperator Framework, pero ahora
empieza lo divertido.

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

Quiero saber los clientes que no han comprado nada en los últimos 3
meses.

¿Cual es el importe medio de los pedidos realizados en el último mes?


Saludos
Respuesta Responder a este mensaje
#12 Carlos M. Calvelo
07/03/2007 - 19:04 | Informe spam
Hola Alfredo,

On 7 mrt, 18:04, Alfredo Novoa wrote:
O sea que todo este rollo solo sirve para generar 3 inserts en SQL, y
además no has puesto el código de las "clases de negocio", que seguro
que no es poco.

A partir de aquí todas las reglas de negocio tendrán que ser
aseguradas por el SGBD. Como por ejemplo que exista un artículo con
ese código, que exista un cliente con ese código, que la cantidad sea
mayor que cero, y también tiene que controlar las transacciones y la
concurrencia.

>Eso es todo.

Eso es todo lo que puede hacer Cooperator Framework, pero ahora
empieza lo divertido.

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

Quiero saber los clientes que no han comprado nada en los últimos 3
meses.

¿Cual es el importe medio de los pedidos realizados en el último mes?





Estoy convencido de que este es un ejercio inútil y no va a llevar a
ninguna parte. Creer lo contrario me parece ingenuo.
Sé por experiencia que si no se tiene cierta propensión a buscarle
los fundamentos a las cosas no tiene sentido machacar. Para
aquel que si tenga esa propensión ya se ha dicho bastante y lo
tendrá que machacar él mismo (y mucho).

Aunque tengo que reconcer que ANT1 me hace dudar.
Es el único de los que veo participar que me da la impresión de
tener un interés genuino. Pero también tiene referencias de
sobra y sus dudas no se van a resolver aquí.
Solo mi opinión!

Saludos,
Carlos
Respuesta Responder a este mensaje
#13 Eugenio Serrano
07/03/2007 - 19:08 | Informe spam
Gracias Alfredo, asi me gusta el debate

Claro que hay codigo extra que no he puesto, ya que el mismo se genera
automaticamente, es decir no tengo que programarlo yo.
Lo que he escrito es lo unico que tengo que programar yo, lo demas se genera
automaticamente.

Tu si que tienes que escribir bastante mas codigo para llamar a tu
procedimiento, porque tener el procedimiento en la base de datos no sirve
para nada si no escribes codigo para llamarlo y pasarle los valores...

Porque no nos dices en que lenguaje esta escrito y como lo harias para
llamarlo ??

Ahora respondo a tus preguntas:

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.

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


Quiero saber los clientes que no han comprado nada en los últimos 3 meses.


Hago exactamente lo mismo, escribo la consulta en el Modeler y le digo que
me devuelva dichos clientes. Cooperator Modeler se encarga de generar el
Stored Procedure y el metodo en el mapper que me devuelve esos clientes

Dim misClientes as ClienteList =
ClienteMapper.GetClientesSinMovimientos(Now)


¿Cual es el importe medio de los pedidos realizados en el último mes?



Aqui mi stored procedure tiene que devolver un decimal por lo que le digo a
Cooprator Modeler que dicho query no devuelve clientes sino un escalar: Y no
programo nada mas !!

Dim ImporteMedio as Decimal = ClienteMapper.GetImporteMedio(Now.Month)

Repito, claro que hay codigo por detras como tu dices, pero es generado todo
automaticamente, no necesito escribir nada mas que esto.

Sigo esperando que pases como harias para poder ejecutar tu procedimiento
para emitir la orden


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:41:46 -0300, "Eugenio Serrano"
wrote:

Para emitir una orden, el código quedaria algo mas o menos asi...
(Obviuamente que deberia cargar la orden desde una interface de usuario,
pero este codigo emite una orden con 2 renglones)

'Primero creo un nuevo objeto Orden.
Dim miOrden as Orden = New Orden()
miOrden.Cliente = New Cliente(22)
miOrden.Fecha = Now

'Luego creo un renglon
Dim miRenglon as OrdenDetalle = New OrdenDetalle()
miRenglon.Articulo = New Articulo("1001")
miRenglon.Cantidad = 2

'Y otro renglon mas
Dim miRenglon2 as OrdenDetalle = New OrdenDetalle()
miRenglon.Articulo = New Articulo("2001")
miRenglon.Cantidad = 3

'Agrego los renglones al objeto Orden
miOrden.Detalles.Add(miRenglon1)
miOrden.Detalles.Add(miRenglon2)

'Y ahora mando a grabar la orden con sus renglones a la base de datos
'Como mi objeto Orden es una entidad de negocio, el mapper me hace los
inserts en las 2 tablas dentro de una misma transaccion

OrdenMapper.Insert( miOrden)



O sea que todo este rollo solo sirve para generar 3 inserts en SQL, y
además no has puesto el código de las "clases de negocio", que seguro
que no es poco.

A partir de aquí todas las reglas de negocio tendrán que ser
aseguradas por el SGBD. Como por ejemplo que exista un artículo con
ese código, que exista un cliente con ese código, que la cantidad sea
mayor que cero, y también tiene que controlar las transacciones y la
concurrencia.

Eso es todo.



Eso es todo lo que puede hacer Cooperator Framework, pero ahora
empieza lo divertido.

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

Quiero saber los clientes que no han comprado nada en los últimos 3
meses.

¿Cual es el importe medio de los pedidos realizados en el último mes?


Saludos
Respuesta Responder a este mensaje
#14 Alfredo Novoa
07/03/2007 - 19:14 | Informe spam
Hola Carlos,

On 7 Mar 2007 10:04:25 -0800, "Carlos M. Calvelo"
wrote:

Estoy convencido de que este es un ejercio inútil y no va a llevar a
ninguna parte. Creer lo contrario me parece ingenuo.



Yo igual, pero ya que han insistido tanto ...

A partir de aquí solo espero respuestas delirantes.


Saludos
Alfredo
Respuesta Responder a este mensaje
#15 Eugenio Serrano
07/03/2007 - 19:17 | Informe spam
Olvide de responderte una parte:

A partir de aquí todas las reglas de negocio tendrán que ser
aseguradas por el SGBD. Como por ejemplo que exista un artículo con
ese código, que exista un cliente con ese código, que la cantidad sea
mayor que cero, y también tiene que controlar las transacciones y la
concurrencia.



Las integridad de los datos debe esta asegurada por supuesto por la base de
datos.
Que use objetos no quiere decir que me olvide de asegurar esas cosas en la
base, ya que es responsablidad de la misma.

En cuanto a las transacciones, como ya dije, al grabar una orden el mapper
inicia una transaccion, hace los 3 inserts y luego confirma la misma. Si hay
un error no se confirma ningun registro.

En cuanto a la concurrencia, si Cooperator Modeler detecta un campo del tipo
TimeStamp en la tabla, genera los procedimientos de tal forma que si hay
cambios entre modificaciones se dispara una excepcion para que el usuario la
maneje

Todavia estoy esperando como harias para llamar a tu procedimiento

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;
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida