none
Desenvolvimento com 3 camadas - Ajuda para criar camada de dados e de negócios RRS feed

  • Pergunta

  • Boa Tarde

    Sou iniciante no desenvolvimento para web e gostaria de ajuda para enteder algumas coisas.
    Agradeço desde já toda ajuda. Segue meu ambiente atual. Com base no material apresentado nesses dois links:

    http://www.dotnetmaniacs.com.br/dotnetmaniacs/article_view.aspx?ArticleId=63
    http://www.linhadecodigo.com.br/Artigo.aspx?id=1512&pag=3

    iniciei a saga para desenvolver uma parte de um sistema (desktop) na web utilizando o conceito de
    camadas.Oque estou utilizando:

    SQL server
    Visual Studio 2005 - C#

    Oque eu já fiz:

    1) Criei uma Blank Solution (New\Project\Other Project Types\Visual Studio Solutions\Blank Solution) chamada CR
        Com minhas pesquisas entendi que crio essa solução para poder incluir as camadas de regra de negocio e de dados junto com a web aplication e se quiser pode incluir também um projeto desktop. Em outras palavras, dessa forma posso incluir varios projetos que compartilham a mesma regra de negócio e o mesmo acesso de dados. (Seria isso?)

    2) Nessa solução inseri 2 projetos Class Library (chamadas "CamadaDeDados" e "CamadadeNegocios") e um projeto Asp.net web aplication (chamado CR.Net). Dessa forma tenho as 3 camadas:

       Camada de Interface = project CR.NET   
       Camada de Negócios = class library CamadaDeNegocios
       Camada de Dados = class library CamadadeDados

    3) Sobre as referencias, coloquei :
       
       CR.NET referencia para CamadaDeNegocios
       Na CamadaDeNegocios referencia para CamadaDeDados

    4) Criei uma conexão no Server Explorer para acessar o banco.

    5) Minha página inicial será um login, por enquanto não me aventurei no componente login e coloquei somente 2 textbox para login e senha, um botão e um label para exibir erros. A idéia é após o usuario clicar no botão verificar se o usuário existe e se a senha esta correta.
       Na class library CamadaDeDados adicionei um dataset (Add\New Item\DataSet ) chamado dsUsuario
       Na conexão que fiz no Server Explorer arrastei a tabela usuário para o dataset criado, dessa forma o mesmo já criou a DataTable Usuario e a table adapter. Na table adapter adicionei mais uma query para localizar o usuario por login, chamada ObtemUsuarioPorLogin(@login)
       Na class library CamadadeNegocios criei um metodo chamado "ValidaLogin" que irá chamar os métodos necessários da camada de dados para realizar as validações de acordo com nossas regras de negócio.


    Dúvidas:

    1) Essa estrutura criada esta correta ?

    2) Foi criado um Settings.settings e um app.config (onde foi incluido os dados da conexão). A string de conexão tem que estar no arquivo web.config do projeto cr.net tb ? Pq ?

    3) Para cada tabela devo criar um dataset ? ou devo incluir todas as tabelas em um só ?Trabalhar com data set tipado seria a melhor opção ? Essa forma de fazer é viável ou eu deveria fazer tudo no código (criar a classe usuario, criar o metodo e etc no codigo ?) . Não estou entendendo bem como criar a camada de dados.

    4) Como faço para manipular os dados obtidos no método "ObtemUsuarioPorEmail" ? (Segue meu código para entender a questão

    /*** default.aspx do projeto CR.NET ***/

    namespace CR.NET
    {
       public partial class Default : System.Web.UI.Page
       {
          protected void Button1_Click(object sender, EventArgs e)
          {
             CamadaDeNegocios.Usuario TESTE = new CamadaDeNegocios.Usuario();

             string UsuarioAtivo = TESTE.ValidaLogin(txtLogin.Text, txtSenha.Text);

             if (UsuarioAtivo != "")
             {
                Label1.Text = "Deu certo ..hehe";
             }

          }
       }
    }

    (Na verdade eu gostaria de retornar um boolean mas deixei assim por enquanto para poder testar)


    /*** Camada de Negocios

    namespace CamadaDeNegocios

       public class Usuario
       {
          public string ValidaLogin(string Login, string Senha)
          {
             //instancia o ??             
             CamadaDeDados.dsUsuarioTableAdapters.USUARIOTableAdapter Usuario = new CamadaDeDados.dsUsuarioTableAdapters.USUARIOTableAdapter();
                            
             //primeiro verifica se usuario informado existe
             Usuario.ObtemUsuarioPorEmail(Login);

             //Aqui irei incluir outros métodos de verificação

             return "lele";
          } 
       }
    }

    Preciso definir o return da "validaLogin". Queria verificar se houve retorno de registros quando chamo o "obtemusuario.."
    Essa ideia :

    iF (USUARIO TEM RETORNO) {
      return true
    else
      return false   




    Pessoal desculpem pela extensão é que estou 1/2 perdida ..

    Se alguem puder me ajudar agradeço.
    Patricia
    quinta-feira, 29 de maio de 2008 20:07

Todas as Respostas

  • Olá Patricia,

     

    Respondendo às perguntas:

     

    1) A sua estrutura está correta, pois existem várias formas para se criar um projeto em camadas. Hoje muitos projetos não apenas utilizam 3 camadas, mas N camadas. Depende da necessidade de cada um e da forma de trabalho.

     

    2) A string de conexão tem que estar no web.config sim. Porque você irá compilar o projeto de dados e no projeto web você terá apenas uma dll do projeto de dados. Portanto, a sua string de conexão precisará estar no web.config, pois a dll do projeto de dados não carrega o arquivo de configuração do projeto.

     

    3) Pra ser sincero, há muito tempo eu não trabalho com DataSet tipados, nem saberia responder suas perguntas de imediato. Prefiro criar a classe de dados na unha, utilizando Generics como retorno de métodos para as outras camadas.

     

    4) Isso dependerá muito de como irá trabalhar na sua camada de dados.

     

     

    Espero ter ajudado!

     

    Luidy

     

    sexta-feira, 30 de maio de 2008 17:01
  • Olá Luidy

    obrigada pela ajuda Smile

    Na questão 3 vc colocou que prefere fazer "na unha". Vc teria algum link ou tutorial para me indicar que mostre um exemplo para iniciante. Pois como sou iniciante nesse tipo de desenvolvimento não tenho muita idéia de como declarar as classes e os métodos delas.

    Se alguém tiver algum materia com exemplos agradeço.



    sexta-feira, 30 de maio de 2008 17:12