Foros del Web » Programación para mayores de 30 ;) » .NET »

Transacciones en 3 capas

Estas en el tema de Transacciones en 3 capas en el foro de .NET en Foros del Web. ¿Qué tal? Tengo una serie de dudas sobre el diseño de mi aplicación. Mi proyecto lo tengo dividido en las 3 capas de siempre, presentación, ...
  #1 (permalink)  
Antiguo 23/02/2009, 10:40
 
Fecha de Ingreso: febrero-2008
Ubicación: EH
Mensajes: 117
Antigüedad: 16 años, 2 meses
Puntos: 0
Exclamación Transacciones en 3 capas

¿Qué tal?

Tengo una serie de dudas sobre el diseño de mi aplicación. Mi proyecto lo tengo dividido en las 3 capas de siempre, presentación, negocio y datos. El problema me ha venido cuando he empezado a incorporar transacciones al proyecto.

Imaginense que en el interfaz del usuario pregunto los datos de una persona y cuantos coches tiene. Estos datos los guardo en dos objetos de tipo Persona y Coche, donde el coche coge unos valores por defecto. En la capa de negocio tengo dos clases PersonaNegocio y CocheNegocio.
Lo que hago es:
de Interfaz
-->PersonaNegocio.GuardarPersona

de PersonaNegocio.GuardarPersona
-->PersonaDatos.Guardar
-->CocheNegocio.GuardarCoche

de CocheNegocio.GuardarCoche
-->CocheDatos.Guardar

la conexion la abro en la capa de datos por cada insert, pero lo que quiro es abrir la transaccion antes de todo y terminarla después de todo. Mi pregunta es, ¿dónde debo empezar/terminar la transaccion? en el negocio e ir pasando o igual no deberia tener una clase de cada en el negocio?¿?¿?

Si alguién me podría aconsejar, le estaría muy agradecida!
  #2 (permalink)  
Antiguo 23/02/2009, 11:27
Avatar de almerak  
Fecha de Ingreso: abril-2006
Ubicación: en algun lugar
Mensajes: 60
Antigüedad: 18 años
Puntos: 0
Respuesta: Transacciones en 3 capas

no necesariamente utilizaras una clase de datos para guardar

-->PersonaNegocio.GuardarPersona

de PersonaNegocio.GuardarPersona
-->PersonaDatos.Guardar X
-->CocheNegocio.GuardarCoche

de CocheNegocio.GuardarCoche
-->CocheDatos.Guardar X

no necesitas crear una nueva variable o instancia de tu clase de datos, pq el mismo codigo se volveria ilegible, por naturaleza
lo que yo he hecho es llamar a mi clase datos,
y ahi solo la utilizo cuando inserto, actualizo, y elimino,
mi clase de negocios solo vienen estando estas transacciones o alguna mas que necesite mi objeto, actualizar masivamente o algo asi, pero para alguna trasaccion con la bd, solo utilizo un procedimiento que haga lo que quiero, y un metodo en mi objeto que lo llame, es simple es esto

Persona.GuardarPersona()
public void GuardarPersona()
{
datos.EjecutarProcedimiento("exec spGuardarPersona");
}

public void EjecutarProcedimiento()
/*
logica de ejecucion del procedimiento con net
*/

mi capa de datos es simple, y no me complico iniciando a cada rato otras instancias, pq mas que en esa clase la utilizare

Interfaz
/ \
Obj1 Obj2
/ \
datos datos
{insert} {update}

esta es un diagrama de como utilizo las 3 capas.
no se si te ayude, te enrede, o simplemente hice nada :P
  #3 (permalink)  
Antiguo 23/02/2009, 11:50
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: Transacciones en 3 capas

investiga sobre TransactionScope
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #4 (permalink)  
Antiguo 24/02/2009, 01:27
 
Fecha de Ingreso: febrero-2008
Ubicación: EH
Mensajes: 117
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Transacciones en 3 capas

Ok, gracias a los dos. Voy a mirar eso del TransactionScope
  #5 (permalink)  
Antiguo 24/02/2009, 03:21
 
Fecha de Ingreso: febrero-2008
Ubicación: EH
Mensajes: 117
Antigüedad: 16 años, 2 meses
Puntos: 0
Exclamación Respuesta: Transacciones en 3 capas

He estado mirando y probando el TransactionScope y mirando lo que es me parece una maravilla, peroo, me da un error. Una vez que abro la transacción, al abrir la conexión me da el siguiente error:
El administrador de transacción no está disponible

Using trans As New TransactionScope(TransactionScopeOption.RequiresNe w)

Dim cmd As DbCommand = Nothing

cmd= ..... 'Aquí creo el comando: CommandType, Connection y Parameters. No pongo el código porque lo tengo en varias funciones

cmd.Connection.Open() 'Error

'.....

trans.Complete()
End Using


Cuando hago el cmd.Connection.Open() me he mijado que la propiedad Transaction de cmd está vacío. ¿Puede que tenga que estar lleno?

¿Sabe alguién por qué me da el error El administrador de transacción no está disponible?

nota: La BD es oracle y está en otra máquina, e intentando cambiar en mi pc la siguientes propiedades pero no he conseguido nada:
http://blogdediegoramirez.blogspot.c...-no-morir.html
  #6 (permalink)  
Antiguo 28/02/2009, 07:40
 
Fecha de Ingreso: junio-2008
Mensajes: 2
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Transacciones en 3 capas

Tenes que iniciar el servicio windows de transacciones distribuidas desde las herramientas administrativas en el panel de control.

Saludos
  #7 (permalink)  
Antiguo 02/03/2009, 08:46
 
Fecha de Ingreso: febrero-2008
Ubicación: EH
Mensajes: 117
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Transacciones en 3 capas

Si te refieres al MSDTC, esta iniciado.

Gracias,
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 00:26.