Usuário com melhor resposta
Desenvolvimento em 3 camadas

Pergunta
-
Colegas,
Tenho um projeto desenvolvido em 3 Camadas, após preencher uma tabela pelo DAL, preciso manipular seus valores "atribuição da BLL", gostaria de saber se eu inserir uma referencia no DAL para a BLL estaria infrigindo alguma regra do desenvolvimento em 3 camadas.
Estou com um casso que após o preenchimento de uma tabela preciso imediatamente, alterar / manipular os valores do DataSet, como so tenho as informações da Tabela preenchido pela DAL, não sei se incluir uma referência para BLL seria correto.
BLL = Business Logic Layer - Classes de regra de negócios
DAL = Data Acess Layer - Classe de conexão com a base
Obrigado
Bene
Benedito Santana - São Paulo/SP - Sua pergunta foi respondida ? Marque-a !- Movido C. Augusto Proiete [MVP]Moderator quinta-feira, 11 de fevereiro de 2010 23:33 Movido para o fórum apropriado (De:C#)
Respostas
-
Olá Benedito,Partindo do princípio que a sua camada de negócios (BLL) *depende* da sua camada de acesso a dados (DAL) para obter as informações que depois são utilizadas nas suas regras de negócio, é errado referenciar a BLL na DAL.Aliás, se forem projetos separados (mais comum), o Visual Studio nem irá deixar... Irá dizer que trata-se de uma referência circular.Abraços,Caio Proiete
Caio Proiete
Microsoft MVP, MCT, MCPD, MCTS, MCSD
http://www.caioproiete.com- Marcado como Resposta Wagner dos Santos VasconcellosModerator terça-feira, 29 de março de 2011 12:52
-
Benedito,
nao sei exatamente qual sua necessidade no que toca a negócio, mas sugiro a seguinte analise:
Se sua camada BLL é de negócio por definicao, o ideal é que ela seja capaz de resolver a sua pendencia de lógica de negocio sozinha. Seja tendo que ir mais de uma vez ao banco ou nao.
Com isso, minha sugestao é que voce pegue os valores necessarios, crie sua logica de condicao na BLL, seja por chamadas a metodos de negocio, seja atraves de classes que portem essa logocia, e depois de atendidas sua condicoes referentes aos valores, voce pegue todo o bloco de estruturas geradas e mante ao banco atraves da DAL.
A DAL nao deve fazer referencia a BLL na forma que voce apresentou. A unica maneira de voce criar a possibilidade delas se comunicarem sem problemas é atraves de injecao de dependencia. Pense sempre em tornar sua DAL autonoma no que se refere a logica de negocio e ela nao deve ficar pensando em banco, o banco é um mero detalhe. Depois de ter resolvido todo o negocio e pendencias ai vc manda a DAL persistir.
Abs
Gustavo Rocha, MCP,MCTS,MCPD,CSM http://subindoaladeira.wordpress.com/- Sugerido como Resposta LeandrodeMelloFagundes quarta-feira, 24 de fevereiro de 2010 11:58
- Marcado como Resposta Wagner dos Santos VasconcellosModerator terça-feira, 29 de março de 2011 12:52
-
Caro Caio,
Tenho uma solução com 8 projetos, um deles é Businnes Logic Layer e outro DataAcess Layer, não sei como fazer para no DAL, preencher uma tabela e dependendo do seu conteúdo alterar as informações da tabela e continuar na sub do DAL preenchendo outras tabelas. "Por isto queria chamar a BLL de dentro da DAL para executar minha regra de negocios".
Tudo isto para fazer em uma só conexão SQL.
Outra forma:
Seria contruir na BLL chamadas ao DAL para preencher uma tabela, receber o resultado e executar novamente a DAL em uma nova conexão SQL.
Eu temo que isto fique lento, mas sequindo a estrutura de camadas me parece mais apropriado.
O que devo fazer?
Obrigado
Bene
Benedito Santana - São Paulo/SP - Sua pergunta foi respondida ? Marque-a !- Marcado como Resposta Wagner dos Santos VasconcellosModerator terça-feira, 29 de março de 2011 12:52
-
Olá,
você pode também usar Transaction Scope em alguns casos, que nada mais é do que tentar manter o desacoplamento, ligando a camada de negócios um pouco mais com a de dados:
MSDN Transaction Scope
Atenção para o comentário bem abaixo no exemplo de código
'The Complete method commits the transaction. If an exception has been thrown,
Ou seja, caso de qualquer problema, um RollBack Transaction é feito garantindo a integridade dos dados.
' Complete is called and the transaction is rolled back.
Espero ter ajudado.
Abraços
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand" (Martin Fowler)- Sugerido como Resposta LeandrodeMelloFagundes quarta-feira, 24 de fevereiro de 2010 11:58
- Marcado como Resposta Wagner dos Santos VasconcellosModerator terça-feira, 29 de março de 2011 12:52
Todas as Respostas
-
Olá Benedito,Partindo do princípio que a sua camada de negócios (BLL) *depende* da sua camada de acesso a dados (DAL) para obter as informações que depois são utilizadas nas suas regras de negócio, é errado referenciar a BLL na DAL.Aliás, se forem projetos separados (mais comum), o Visual Studio nem irá deixar... Irá dizer que trata-se de uma referência circular.Abraços,Caio Proiete
Caio Proiete
Microsoft MVP, MCT, MCPD, MCTS, MCSD
http://www.caioproiete.com- Marcado como Resposta Wagner dos Santos VasconcellosModerator terça-feira, 29 de março de 2011 12:52
-
Caro Caio,
Tenho uma solução com 8 projetos, um deles é Businnes Logic Layer e outro DataAcess Layer, não sei como fazer para no DAL, preencher uma tabela e dependendo do seu conteúdo alterar as informações da tabela e continuar na sub do DAL preenchendo outras tabelas. "Por isto queria chamar a BLL de dentro da DAL para executar minha regra de negocios".
Tudo isto para fazer em uma só conexão SQL.
Outra forma:
Seria contruir na BLL chamadas ao DAL para preencher uma tabela, receber o resultado e executar novamente a DAL em uma nova conexão SQL.
Eu temo que isto fique lento, mas sequindo a estrutura de camadas me parece mais apropriado.
O que devo fazer?
Obrigado
Bene
Benedito Santana - São Paulo/SP - Sua pergunta foi respondida ? Marque-a !- Marcado como Resposta Wagner dos Santos VasconcellosModerator terça-feira, 29 de março de 2011 12:52
-
Benedito,
nao sei exatamente qual sua necessidade no que toca a negócio, mas sugiro a seguinte analise:
Se sua camada BLL é de negócio por definicao, o ideal é que ela seja capaz de resolver a sua pendencia de lógica de negocio sozinha. Seja tendo que ir mais de uma vez ao banco ou nao.
Com isso, minha sugestao é que voce pegue os valores necessarios, crie sua logica de condicao na BLL, seja por chamadas a metodos de negocio, seja atraves de classes que portem essa logocia, e depois de atendidas sua condicoes referentes aos valores, voce pegue todo o bloco de estruturas geradas e mante ao banco atraves da DAL.
A DAL nao deve fazer referencia a BLL na forma que voce apresentou. A unica maneira de voce criar a possibilidade delas se comunicarem sem problemas é atraves de injecao de dependencia. Pense sempre em tornar sua DAL autonoma no que se refere a logica de negocio e ela nao deve ficar pensando em banco, o banco é um mero detalhe. Depois de ter resolvido todo o negocio e pendencias ai vc manda a DAL persistir.
Abs
Gustavo Rocha, MCP,MCTS,MCPD,CSM http://subindoaladeira.wordpress.com/- Sugerido como Resposta LeandrodeMelloFagundes quarta-feira, 24 de fevereiro de 2010 11:58
- Marcado como Resposta Wagner dos Santos VasconcellosModerator terça-feira, 29 de março de 2011 12:52
-
Olá,
você pode também usar Transaction Scope em alguns casos, que nada mais é do que tentar manter o desacoplamento, ligando a camada de negócios um pouco mais com a de dados:
MSDN Transaction Scope
Atenção para o comentário bem abaixo no exemplo de código
'The Complete method commits the transaction. If an exception has been thrown,
Ou seja, caso de qualquer problema, um RollBack Transaction é feito garantindo a integridade dos dados.
' Complete is called and the transaction is rolled back.
Espero ter ajudado.
Abraços
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand" (Martin Fowler)- Sugerido como Resposta LeandrodeMelloFagundes quarta-feira, 24 de fevereiro de 2010 11:58
- Marcado como Resposta Wagner dos Santos VasconcellosModerator terça-feira, 29 de março de 2011 12:52