• Domingo 22 de Diciembre de 2024, 15:33

Autor Tema:  Uso de clases y base de datos  (Leído 1466 veces)

gerloxxx

  • Miembro MUY activo
  • ***
  • Mensajes: 121
    • Ver Perfil
Uso de clases y base de datos
« en: Sábado 20 de Marzo de 2010, 02:25 »
0
Hola a todos, tengo poco tiempo con el uso de objetos y tengo unas cuantas dudas con el diseño de mis clases principalmente cuando usan acceso a base de datos...
Por ejemplo si tengo una clase "Factura"  esta a su vez se compone de una clase "Detalle" donde una factura tiene varios detalles y las dos se componen de una clase para el manejo de la base de datos, entonces si tanto Factura como Detalle tienen un método Guardar() cómo puedo hacer para que cuando guarde la factura igual se guarde el detalle con la misma transaccion ya que si falla el guardado de alguno de sus detalles no tiene caso seguir guardando la factura...

Dónde puedo encontrar ejemplos de clases que me ayuden a mejorar mis tecnicas de programacion?


saludos

eltruhanero

  • Miembro activo
  • **
  • Mensajes: 85
    • Ver Perfil
Re: Uso de clases y base de datos
« Respuesta #1 en: Sábado 20 de Marzo de 2010, 05:22 »
0
Mira permiteme que te sugiera algo, y si ya lo tenes hecho o lo descartastes por alguna razon no te ofendas.

Me imagino que las clases Factura y Detalle las usas en tu logica de negocio.

Yo crearía una capa llamada DataAccess o "Acceso a datos" en la cual consentro todo el acceso a datos, agregando una Facade para acceder al mismo.
Haciendo por ejemplo DataAccessFacade.Instance.Save(Factura fac, Detalle[] det), o si desde Factura podes acceder a los Detalle[]. Entonces quizas no debas pasar tambien los Detalles.


Adentro el save podes hacer algo por el estilo:
Código: C#
  1.  
  2. Save(Factura fac, Detalle[] det)
  3. {
  4.       SqlConnection conn = new SqlConnection("conexion");
  5.       SqlTransaction trans = conn.BeginTransaction();
  6.  
  7.       try
  8.       {
  9.             GuardarFactura(factura, trans); // Usa la trans para guardar con los cmd
  10.  
  11.             foreach (det in Detalle in Factura.Detalles)
  12.             {
  13.                   GuardarDetalle(det, trans);  // Usa la trans para guardar con los cmd
  14.             }
  15.             trans.Commit();
  16.       }
  17.       catch(Exception ex)
  18.       {
  19.              Log(ex);
  20.              Rollback
  21.       }
  22. }
  23.  
  24.  
De esta forma centralizas desde donde guardas tus objetos de negocio... si esta estructura no te es posible quizas puedas compartir tu transaccion entre los distintos Guardar de los distintos objectos Factura y Detalle...pero me parece una solucion un poco sucia...

Que opina el resto del foro?

Saludos, Daniel.

gerloxxx

  • Miembro MUY activo
  • ***
  • Mensajes: 121
    • Ver Perfil
Re: Uso de clases y base de datos
« Respuesta #2 en: Sábado 20 de Marzo de 2010, 20:16 »
0
Gracias por tu comentario, yo ponia los métodos de guardar, leer... etc,  dentro del objeto mismo, algo asi como objeto.guardar(), pero creo que con esto no respeto lo que es la capa acceso a datos...


saludos