TRANSACTION EM 3 CAMADAS
olá amigos, tudo bem?
seguindo na saga sombria do POO.
estou migrando um projeto para POO 3 camadas,
estou tentando não misturar as camadas.
porem como trabalhar com Transaction ?
tenho que gerar o ID ( o iD é composto, não da pra ser automático)
tenho que gravar em varias tabelas , algumas não estão na classe.
se algo der errado, preciso abortar tudo.
desde ja agradeço
seguindo na saga sombria do POO.
estou migrando um projeto para POO 3 camadas,
estou tentando não misturar as camadas.
porem como trabalhar com Transaction ?
tenho que gerar o ID ( o iD é composto, não da pra ser automático)
tenho que gravar em varias tabelas , algumas não estão na classe.
se algo der errado, preciso abortar tudo.
desde ja agradeço
Quando eu preciso realizar esse tipo de operação, onde envolvem várias outras micro-operações com outras entidades, eu faço isso na camada BLL.
Claro, que na sua camada de dados, seus os métodos precisarão ter sobrecargas para aceitar objetos de transações também.
Caso esteja usando alguma ferramenta ORM, como o Entity Framework... Você pode passar o contexto como parâmetro, e no final do BLL dá um SaveChanges.
Talvez algum colega que tenha mais afinidade com Design Patterns possa te orientar melhor, mas atualmente, tenho feito dessa forma.
Abraços!
Claro, que na sua camada de dados, seus os métodos precisarão ter sobrecargas para aceitar objetos de transações também.
Caso esteja usando alguma ferramenta ORM, como o Entity Framework... Você pode passar o contexto como parâmetro, e no final do BLL dá um SaveChanges.
Talvez algum colega que tenha mais afinidade com Design Patterns possa te orientar melhor, mas atualmente, tenho feito dessa forma.
Abraços!
De acordo com o livro Domain-Driven Design do Eric Evans, isso deve ser feito na Camada de Aplicação.
não estou usando ORM , EF...
acho estranho que tenho que levar driver, conexão e outros dados para camada de aplicação
na BLL tbm não teria o driver de conexão e nem acesso mysqlcommand.transaction
acho estranho que tenho que levar driver, conexão e outros dados para camada de aplicação
na BLL tbm não teria o driver de conexão e nem acesso mysqlcommand.transaction
O que você poderia fazer é usar o padrão factory. Sua conexão seria uma classe, que você instancia e ela vai agir muito parecido com o contexto de dados do EF. Então ficaria:
using (MinhaFactory cn = new MinhaFactory())
{
cn.IniciaTransacao();
///faça todas as operações que quer que estejam dentro da transação
if (nenhumErro)
cn.Commit();
else
cn.Rollback();
}
Tópico encerrado , respostas não são mais permitidas