Usuário com melhor resposta
Gravar dados utilizando 3 camadas

Pergunta
-
Olá a todos.
Estou tentando inserir dados no meu banco.
Peguei alguns exemplos na internet, porém as explicações são todas sem trabalhar em 3 camadas.
Estou meio perdido, e não sei como trabalhar.
Segue o que fiz até o momento:
UI: private string Usuario() { string usuario = usuarioTextBox1.Text; return usuario; } BLL: public void GuardaUsuario() { classeDAL dal = new classeDAL(); dal.GravaUsuario("insert into clientes(nome) Values(@nome)"); } DAL: public void GravaUsuario(string sql) { SqlConnection cn = new SqlConnection(strConexao); SqlCommand cmd = new SqlCommand(sql, cn); cmd.Parameters.Add(new SqlParameter("@nome",/*NOME DO TEXTBOX QUE NAO SEI COMO COLOCAR*/); cn.Open(); cmd.ExecuteNonQuery(); cn.Close(); } <span style="font-weight:bold; font-style:italic; text-decoration:underline"> </span>
Desde já. Agradeço!
Respostas
-
Olá Phellipe,
Eu aconselho que você cria mais uma camada para persistir os dados, tipo uma representação das entidades que deseja manipular. Algo deste tipo:
Entidades:
public class Usuario
{
public Int32 idUsuario{ get; set; }
public String nomeUsuario{ get; set; }
}UI:
private string Usuario()
{
Usuario objUsuario = new Usuario();objUsuario.nomeUsuario = usuarioTextBox1.Text;
UsuarioBLL usuario = new UsuarioBLL().GuardaUsuario(objUsuario);}
BLL:
public void GuardaUsuario(Usuario objUsuario)
{
classeDAL dal = new classeDAL();
dal.GravaUsuario(objUsuario);
}
DAL:
public void GravaUsuario(Usuario objUsuario)
{
SqlConnection cn = new SqlConnection(strConexao);
SqlCommand cmd = new SqlCommand(sql, cn);
cmd.Parameters.Add(new SqlParameter("@nome", objUsuario.nomeUsuario); //ACREDITO QUE AQUI RESPONDI SUA DUVIDA :-)
cn.Open();
cmd.ExecuteNonQuery();
cn.Close();
}Espero ter ajuadado, ao menos um pouco!
PS: Se o post foi util, classifique-o como resposta! ;-)
Carlos Monteiro
MCP ASP.Net C#
twitter: @carloshkd
http://www.wx7.com.br- Sugerido como Resposta Priscila Mayumi Sato quarta-feira, 23 de fevereiro de 2011 15:06
- Marcado como Resposta AndreAlvesLimaModerator sexta-feira, 27 de maio de 2011 12:19
-
Olá Senhores, tudo bem ?
Acredito que a estrutura em camadas que o Phellipe esta utilizando talvez não seja o MVC e sim a "tradicional", com a BE/BO (Bussiness Entities/Business Objects), BLL(Business Logic Layer) e DAL (Data Access Layer).
Caso seja esta a estrutura utilizada por você Phellipe, sugiro a leitura do seguinte artigo(dividido em 3 partes), para entendimento do conceito a estrutura e utilização dos métodos de 3 camadas.
A versão utilizada neste artigo é o .NET 2.0, mas o conceito de camadas esta muito bem explicado, e pode ser entendido facilmente (aprendi e entendi claramente através destes artigos a aplicação do conceito POO em .NET). Claro que com os frameworks mais recentes (3.5 / 4.0), tecnicamente o código do artigo pode ser melhorado, mas o conceito continua praticamente o mesmo.
Seguem os link's:
Building Layered Web Applications with Microsoft ASP.NET 2.0 - Part 1
http://imar.spaanjaars.com/416/building-layered-web-applications-with-microsoft-aspnet-20-part-1Building Layered Web Applications with Microsoft ASP.NET 2.0 - Part 2
http://imar.spaanjaars.com/419/building-layered-web-applications-with-microsoft-aspnet-20-part-2Building Layered Web Applications with Microsoft ASP.NET 2.0 - Part 3
http://imar.spaanjaars.com/420/building-layered-web-applications-with-microsoft-aspnet-20-part-3Agora caso seja o MVC mesmo, o link que o Bruno Seixas passou e a explicação do Thiago C. Maia estão excelentes.
[]'s
Michel Zerbinatti
- Editado Michel Zerbinati terça-feira, 22 de fevereiro de 2011 15:23 ajuste de link
- Sugerido como Resposta Eduardo Cury sábado, 26 de março de 2011 07:42
- Marcado como Resposta AndreAlvesLimaModerator sexta-feira, 27 de maio de 2011 12:19
Todas as Respostas
-
Olá Phellipe,
Eu aconselho que você cria mais uma camada para persistir os dados, tipo uma representação das entidades que deseja manipular. Algo deste tipo:
Entidades:
public class Usuario
{
public Int32 idUsuario{ get; set; }
public String nomeUsuario{ get; set; }
}UI:
private string Usuario()
{
Usuario objUsuario = new Usuario();objUsuario.nomeUsuario = usuarioTextBox1.Text;
UsuarioBLL usuario = new UsuarioBLL().GuardaUsuario(objUsuario);}
BLL:
public void GuardaUsuario(Usuario objUsuario)
{
classeDAL dal = new classeDAL();
dal.GravaUsuario(objUsuario);
}
DAL:
public void GravaUsuario(Usuario objUsuario)
{
SqlConnection cn = new SqlConnection(strConexao);
SqlCommand cmd = new SqlCommand(sql, cn);
cmd.Parameters.Add(new SqlParameter("@nome", objUsuario.nomeUsuario); //ACREDITO QUE AQUI RESPONDI SUA DUVIDA :-)
cn.Open();
cmd.ExecuteNonQuery();
cn.Close();
}Espero ter ajuadado, ao menos um pouco!
PS: Se o post foi util, classifique-o como resposta! ;-)
Carlos Monteiro
MCP ASP.Net C#
twitter: @carloshkd
http://www.wx7.com.br- Sugerido como Resposta Priscila Mayumi Sato quarta-feira, 23 de fevereiro de 2011 15:06
- Marcado como Resposta AndreAlvesLimaModerator sexta-feira, 27 de maio de 2011 12:19
-
-
Carlos, onde você esta colocando o codigo SQL para adicionar ao banco?
Pelo q percebi na DAL vc colocou o nome do usuario no " @nome"
cmd.Parameters.Add(new SqlParameter("@nome", objUsuario.nomeUsuario); //ACREDITO QUE AQUI RESPONDI SUA DUVIDA :-)//
Mas não consegui visualizar onde você esta mandando o valor @nome pro banco.
E no caso onde você esta passando o objUsuario.nomeUsuario, ---- ("@nome", objUsuario.nomeUsuario)-----
eu não consigo chamar o nomeUsuario.
Claudio
-
Phellipe, eu trabalho com MVC desde quando inicei minha vida profissional como desenvolvedor lá no Delphi, aprimorei meu MVC no Java onde me tornei analista de sistemas e hoje estou feliz no C# já com duas pós-graduações.
Tentarei te explicar de forma bem resumida, porém objetiva.
1º - A classe que o Carlos te sugeriu criar (que realmente deve existir), na verdade é a classe VO (Value Object).
2º - Não entendi porque "DAL". O que eu conheço é "DAO" com "O". Que significa: "Data Access Object".
3º - Este seu BLL esta parecendo ser a classe de controle. É nela que devem ficar também as regras de negócios.
Muito bem. Para cada tabela no seu banco, vc terá no mínimo 3 classes na sua aplicação. Um VO, um DAO e um Controle.
A classe VO:
Esta classe possui os atributos da sua tabela (que lá no banco são as colunas da tabela).
A classe DAO:
É nesta classe que é realizado a comunicação com o SGBD. Esta classe deve ser chamada SOMENTE pela sua classe Control. NUNCA, eu disse NUNCA deve ser chamada pela tela ou por algum code-behind. NUUUUUNNNCCCAAAAA!!!!
Ela também não deve ser chamada por outra DAO e nem por uma Controle de outra tabela. Exemplo: a classe PessoaDAO não pode ser chamada pela VeiculoControl, somente pode ser chamada pela PessoaControl.
A classe Controle:
Nesta classe ficam as validações, regras de negócio e gerencia dos dados. É uma "espécie de ponte" entre as telas e as DAO.
A classe de visão:
Visão é a camada responsável por apresentar os dados vindos do banco para o usuário e também responsável por obter do usuário os dados que irão para o banco.
Eu acho que um code-behind pode ser considerado com uma visão.
Sendo assim para a tabela PESSOAS teríamos os seguintes objetos: PessoaDAO, PessoaControl, Pessoa (que é a classe VO) e as visões pessoa.aspx / pessoa.aspx.cs (para um projeto web)
MECÂNICA:
Digamos que vc quer cadastrar uma nova pessoa.
Na tela pessoa.aspx terá um botão que tem um evento. Depois que o usuário preencher todos os dados e clicar no botão, o seu code-behind (pessoa.aspx.cs) vai instanciar a classe VO (Pessoa), vai alimentar essa classe com os dados da tela, vai enviá-la para a PessoaControl, esta classe vai aplicar as regras de negócio (se tiver), validar alguns dados (se necessário), enviar o objeto VO (instanciado lá na tela) para a PessoaDAO e a PessoaDAO vai acionar a tabela ou procedure para realizar o insert.
É mais ou menos isso cara!
Qualquer dúvida posta ai.
- Tiago Maia
-
Se voce trabalha com MVC, deve ter a parte teorica muito bem definida. Mas, devido a sua duvida, tenho impressão que esses artigos vao te ajudar.
http://weblogs.asp.net/scottgu/archive/2007/11/13/asp-net-mvc-framework-part-1.aspx
----------------------------
Bruno Seixas
Analista de Sistemas -
Olá Senhores, tudo bem ?
Acredito que a estrutura em camadas que o Phellipe esta utilizando talvez não seja o MVC e sim a "tradicional", com a BE/BO (Bussiness Entities/Business Objects), BLL(Business Logic Layer) e DAL (Data Access Layer).
Caso seja esta a estrutura utilizada por você Phellipe, sugiro a leitura do seguinte artigo(dividido em 3 partes), para entendimento do conceito a estrutura e utilização dos métodos de 3 camadas.
A versão utilizada neste artigo é o .NET 2.0, mas o conceito de camadas esta muito bem explicado, e pode ser entendido facilmente (aprendi e entendi claramente através destes artigos a aplicação do conceito POO em .NET). Claro que com os frameworks mais recentes (3.5 / 4.0), tecnicamente o código do artigo pode ser melhorado, mas o conceito continua praticamente o mesmo.
Seguem os link's:
Building Layered Web Applications with Microsoft ASP.NET 2.0 - Part 1
http://imar.spaanjaars.com/416/building-layered-web-applications-with-microsoft-aspnet-20-part-1Building Layered Web Applications with Microsoft ASP.NET 2.0 - Part 2
http://imar.spaanjaars.com/419/building-layered-web-applications-with-microsoft-aspnet-20-part-2Building Layered Web Applications with Microsoft ASP.NET 2.0 - Part 3
http://imar.spaanjaars.com/420/building-layered-web-applications-with-microsoft-aspnet-20-part-3Agora caso seja o MVC mesmo, o link que o Bruno Seixas passou e a explicação do Thiago C. Maia estão excelentes.
[]'s
Michel Zerbinatti
- Editado Michel Zerbinati terça-feira, 22 de fevereiro de 2011 15:23 ajuste de link
- Sugerido como Resposta Eduardo Cury sábado, 26 de março de 2011 07:42
- Marcado como Resposta AndreAlvesLimaModerator sexta-feira, 27 de maio de 2011 12:19
-
Phellipe,
Conseguiu solucionar essa questão?
André Alves de Lima
Microsoft MVP - Client App Dev
Visite o meu site: http://www.andrealveslima.com.br
Me siga no Twitter: @andrealveslima