Foros del Web » Programando para Internet » ASP Clásico »

¿Vector de clases?

Estas en el tema de ¿Vector de clases? en el foro de ASP Clásico en Foros del Web. Hola, estoy intentando hacer todo con clases. Debes en cuando, en algunas instancias, utilizo un array de instancias a otras clases las cuales a su ...
  #1 (permalink)  
Antiguo 10/10/2005, 18:54
Avatar de Hereje  
Fecha de Ingreso: junio-2002
Ubicación: Córdoba, Argentina
Mensajes: 439
Antigüedad: 22 años, 11 meses
Puntos: 2
¿Vector de clases?

Hola, estoy intentando hacer todo con clases.

Debes en cuando, en algunas instancias, utilizo un array de instancias a otras clases las cuales a su vez tienen otra y el proceso se hace medio lerdo, me parece que algo estoy haciendo mal.

¿Alguien me puede dar un ejemplo de cómo devolveria un objeto "cliente" los objetos "producto" ?

Como no sé cómo hacerlo me parece que hice cualquiera.

Muchas gracias a quien aporte. Hasta luego!
__________________
Sergio
  #2 (permalink)  
Antiguo 10/10/2005, 19:34
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
No entiendo muy bien lo que dices, pero para mi mas o menos quieres saber que productos ha comprado cierto cliente?

Hazte un metodo, en mi caso le llamare GetProducts dentro de tu clase cliente, que le llamare client y que me regresara un array con todos los campos de productos que ha comprado este cliente, despues puedo iterar este array

Código:
<%
Class client
  Private m_client_id

  Public Property Get client_id()
    client_id = m_client_id
  End Property
  Public Property Let client_id(p_data)
    m_client_id = p_data
  End Property


  Public Function GetProducts()
    Dim rs
    Dim param
    Dim cmd
    Dim ObjConn
    Dim qry
    Set ObjConn= Server.CreateObject("ADODB.Connection")
    Set rs = Server.CreateObject("ADODB.Recordset")
    Set cmd = Server.CreateObject("ADODB.Command")
    qry = "SELECT todos_los_campos_que_quiero_de_productos FROM x_cantidad_de_tablas WHERE tabla.campo_cliente_id = ?"
    Set param = cmd.CreateParameter("client_id", adInteger, adParamInput, 4, m_client_id)
    ObjConn.Open stringDeConexion
    cmd.Parameters.Append(param)
    cmd.ActiveConnection = ObjConn
    cmd.CommandType = adCmdText
    cmd.Commandtext = qry
    rs.CursorType = 3
    rs.Open cmd
    if not rs.EOF then
       ds = rs.GetRows()
       rs.Close
    else
       ds = Null
    end if
    Set rs = Nothing
    Set param = Nothing
    Set cmd = Nothing
    ObjConn.Close
    Set ObjConn = Nothing
    GetProducts = ds
  End Function
End Class
%>


<%
Set ObjClient = new client
ObjClient.client_id = 4
ds = ObjClient.GetProducts()

if isArray(ds) then
  'itero
  for j =0 to uBound(ds,2)
    Response.write(ds(0,j) & "," & ds(1,j)' & etc...)
  next
else
  'No hay productos
end if
%>
Cualquier cosa por aca andamos.

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #3 (permalink)  
Antiguo 11/10/2005, 07:03
Avatar de Hereje  
Fecha de Ingreso: junio-2002
Ubicación: Córdoba, Argentina
Mensajes: 439
Antigüedad: 22 años, 11 meses
Puntos: 2
Hola u_goldman, gracias por contestar.

Yo crei que se podian devolver otros objetos, de hecho se puede, pero parece que no es lo correcto, no se, funciona, pero lerdo.

Yo lo hago de la siguiente forma:
Código:
class comercio
   private int_id, v_obj_producto

   public property get id()
      id = int_id
   end property
   ...
   public function load_productos()
      sql = "sel.."
      gr = rs.getrows
      if isarray(gr) then
         for i = 0 to ubound(gr,2)
            set v_obj_producto(i) = new producto
            v_obj_producto(i).load(gr(0,i))
         next
         load_productos = true
      else
         load_productos = false
      end if
   end function

   public property get productos()
      productos = v_obj_producto
   end property
enc class

class producto
   private str_nombre

   public function load(id)
      sql = "... where id = " & id
      gr = rs.getrows
      str_nombre = gr(0,0)
      ...
   end function

   public property get nombre()
      nombre = str_nombre
   end property
end class
Se aplicaria:
Código:
dim obj_comercio
set obj_comercio = new comercio

if obj_comercio.load_productos then
   for each obj_producto in obj_comercio.productos
      response.write(obj_producto.nombre)
      ...
   next
end if
Quedaría lindo, pero no se si es correcto hacer esto.

Hasta luego!
__________________
Sergio
  #4 (permalink)  
Antiguo 11/10/2005, 10:16
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Pues es totalmente correcto, siempre y cuando tengas ese metodo que te permite hacer una coleccion de tu objeto, yo lo hice regresando directamente el resultado del recordset obtenido con getRows, a la postre las dos soluciones son parecidas, solo que no necesito instanciar otro objeto, pero siempre y cuando funcione adecuadamente es perfectamente valido.

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #5 (permalink)  
Antiguo 11/10/2005, 12:38
Avatar de Hereje  
Fecha de Ingreso: junio-2002
Ubicación: Córdoba, Argentina
Mensajes: 439
Antigüedad: 22 años, 11 meses
Puntos: 2
¿Pero es posible que se vea afectado el rendimiento del sistema utilizando esta tecnica de instanciar muchos objetos?
__________________
Sergio
  #6 (permalink)  
Antiguo 11/10/2005, 13:39
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Supongo que si, finalmente estas haciendo otra llamada a mi gusto un tanto innecesaria.

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #7 (permalink)  
Antiguo 11/10/2005, 14:22
Avatar de Hereje  
Fecha de Ingreso: junio-2002
Ubicación: Córdoba, Argentina
Mensajes: 439
Antigüedad: 22 años, 11 meses
Puntos: 2
Coincido, pero de esa forma, podriamos por ejemplo por cada producto, ejecutar métodos, como modificar, eliminar, etc.

De todas formas, muchas gracias por todo!! Hasta luego.
__________________
Sergio
  #8 (permalink)  
Antiguo 11/10/2005, 14:24
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Pero si sabes que ese vector trae los datos que necesitas de cierta entidad bastaria con llamar al objeto adecuado, el metodo y pasarle las propiedades o los argumentos necesarios a partir de tu vector, no crees?

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #9 (permalink)  
Antiguo 11/10/2005, 19:00
Avatar de Hereje  
Fecha de Ingreso: junio-2002
Ubicación: Córdoba, Argentina
Mensajes: 439
Antigüedad: 22 años, 11 meses
Puntos: 2
Si, es cierto, pero en caso de modificar el orden de los campos en la bd, habria que modificar el codigo en cada lugar en donde se utilizó dicho getrows, en cambio, si manejaramos todo con el objeto, habria que modificar la clase nomas, no?

Lo veo más sólido y profesional trabajar de esta forma, pero a lo mejor sacrificamos el rendimiento del sistema y en algunas oportunidades no se si vale la pena.

Otra pregunta aparte, ¿has podido alguna vez desarrollar alguna aplicación en ASP en 3 capas? ¿Es posible? En caso positivo, ¿no se pierde rendimiento (de tiempos de respuestas mas lerdos) con esta técnica?

Muchas gracias por tu tiempo u_goldman!
__________________
Sergio
  #10 (permalink)  
Antiguo 11/10/2005, 19:06
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Entiendo, pero para que quisieras modificar el orden de los campos?

Si agregar mas, pues solo se hace mas grande el vector y listo.

A mi en realidad no se me hace mas solido trabajar asi, me parece una inconsistencia, pues una entidad no deberia regresarte otra, pero bueno, cuestion de enfoques.

Si, he tenido la oportunidad de trabajar en 3 capas, no hay nada malo, todo lo contrario, en realidad el principio de esta tecnica es tener una mejor estructura y con ello un mejor performance.


Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #11 (permalink)  
Antiguo 11/10/2005, 19:40
Avatar de Hereje  
Fecha de Ingreso: junio-2002
Ubicación: Córdoba, Argentina
Mensajes: 439
Antigüedad: 22 años, 11 meses
Puntos: 2
Si fuese por mi no cambiaria nunca el orden de los campos si unicamente yo manejaria la bd, pero por ahi uno no maneja eso y puede suceder, como decis vos es cuestión de enfoques.

Con respecto al trabajo en 3 capas en ASP, ¿conoces sobre alguna aplicación ya desarrollada que se pueda ver la estructura y código? o podrias darme una idea de cómo llegar a implementar dicha técnica.

Gracias por compartir tu experiencia, hasta luego.
__________________
Sergio
  #12 (permalink)  
Antiguo 11/10/2005, 20:22
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
No conozco ninguna aplicacion prefabricada, solo en la que estoy trabajando
No te voy a decir en que consiste el concepto, porque veo que realmente tus conocimientos son bastante solidos, la solucion que usamos aqui es realmente la siguiente:

Base de datos remota
Capa Logica: manejada con librerias dinamicas(dlls) principalmente
La capa de presentacion: generada a partir de XML-XSL

Con eso queda tu aplicacion bastante limpia, obviamente esta tecnologia no es muy flexible en el aspecto de separar la presentacion y los datos, pero con .NET ya se resuelve mucho esto.


Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #13 (permalink)  
Antiguo 11/10/2005, 21:35
Avatar de Hereje  
Fecha de Ingreso: junio-2002
Ubicación: Córdoba, Argentina
Mensajes: 439
Antigüedad: 22 años, 11 meses
Puntos: 2
¿No se puede decir que quedan totalmente separados los datos (XML generado en ASP) de la presentación (XSL aplicado en el servidor y luego CSS desde el cliente)? ¿Porqué?
__________________
Sergio
  #14 (permalink)  
Antiguo 11/10/2005, 23:45
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Bueno, esto es solo a título personal, pues a mi me parece que desde el momento en el que tienes que hacer una iteración para obtener HTML vamos a decir de un array, ya no es taaaaan limpia la separación de capas, obvio es ser demasiado exigente, por eso digo que a lo mejor es una mera apreciación.

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:10.