domingo, 25 de setembro de 2011

Sistema de Contato em Três Camadas C# - Parte I de III

Introdução

Nos primórdios da computação, quando um aplicativo era executado em uma única máquina, era comum encontrar sistemas monolíticos contendo todas as funcionalidades do aplicativo em uma única grande camada como demonstra a Figura 1, onde sua manutenção e atualização eram extremamente penosas e complexas.


Com o objetivo de se manter diversos aplicativos e uma única base de dados, a arquitetura monolítica evoluiu para uma arquitetura em duas camadas onde a lógica de acesso aos dados estava separada do restante da aplicação, permitindo assim vários programas acessar a mesma base de dados. Apesar desta evolução na arquitetura os sistemas ainda eram potencialmente monolíticos, pois a lógica de apresentação (a interface homem máquina) e a lógica de negócio (algoritmos do sistema) estavam reunidas em uma única camada (Haywood, 2003), como representa a Figura 2.

Com o advento da Internet, esta arquitetura teve que ser alterada, pois o tempo necessário para carregar todos os componentes da regra de negócio no cliente em um aplicativo Web é extremamente elevado, tornando assim o sistema inviável. Devido a esses problemas a arquitetura em duas camadas foi substituída por uma arquitetura em três camadas, como está representado na Figura 3.


A arquitetura em três camadas envolve a separação das funcionalidades usando camadas, com o objetivo de separar a lógica de apresentação, a lógica de negocio e a conexão com o banco de dados (lógica de acesso a dados).
A separação em três camadas torna o sistema mais flexível, de modo que partes podem ser alteradas independentemente. Com o emprego de arquitetura em três, qualquer alteração em uma determinada camada não influi nas demais, desde que o mecanismo de comunicação entre elas permanece inalterado. Isto permite substituir uma camada inteira por outra, independente de que camada seja como mostra a Figura 4, ou que um projeto desenvolvido para web, possa abranger também dispositivos móveis, a partir da inclusão de uma nova camada de apresentação.


Desenvolvimento

 Neste tutorial estaremos desenvolvendo um sistema de contato, com o objetivo de aprender na prática o conceito de três camadas. Na introdução podemos concluir que o conceito de três camadas, tem por objetivo separar a lógica de apresentação da lógica de negocio e da lógica de acesso ao banco.
Vamos entrar criar o banco de dados, neste tutorial vamos usar a Microsoft SQL Server 2008 R2, mas, poderá usar outros SGBD.
Insira o script do banco de dados a seguir:




CREATE DATABASE bdcontato 

-- remova as linhas de cima primeiro. Atenção se não vai da erro 
USE bdcontato 

CREATE TABLE tbcontato 
  ( 
     codigo   INT NOT NULL PRIMARY KEY IDENTITY(1, 1), 
     nome     VARCHAR(130), 
     endereco VARCHAR(150), 
     telefone CHAR(13) 
  ); 
.    

Vamos criar o projeto em c#, utilizando a IDE Microsoft Visual Studio 2010. Para isso clique no menu File > Nem > Project ou Ctrl+Shift+N.

Em Visual C# > Windows > Windows Forms Application.
Em Name = Digite o nome do Projeto. Ex. sisContato


Na aba Solution Explorer, vamos criar duas pastas que vão ficar responsáveis pela lógica de negocio e de acessos a dados.
Parar isso clique com o botão direito Em SisContato > Add> New Folder
e crie as pastas Dados e Negócios.


Conforme a imagem a seguir:



Camada de Acesso a Dados


Crie a classe Banco na pasta Dados e insira o código a seguir:

Criar a Conexão com o banco de dados

public static  string conexao = @"server=.\SQLEXPRESS; Database=bdcontato;Integrated Security=True;";





Como vamos saber a conexão com o banco de dados manualmente?

server= Significa o Servidor do Banco de dados. Geralmente para saber onde esta o servidor, entre no SQL Server e copie o nome do Servidor, conforme a imagem:


Database = Nome do banco de dados, não é necessário inserir a extensão do banco (.mdf);
Esses dois são os mais importantes.
Para isso é indiscutível declarar o namespace para acessar os métodos e classe do banco de dados SQL Server.

using System.Data.SqlClient;



Abrir a conexão com o banco de dados
SqlConnection conn = new SqlConnection(conexao);

Declara o comando SQL, sendo inicializado como vazio (null)
SqlCommand cmd = null;

Criar o método para o comando SQL, que ficar responsável por inserir, atualizar e excluir e utilizar o parâmetro para inserir o comando SQL.
 public void ComandoSQL(string Sql)
        {
            //Abre a Conexão
            conn.Open();
            //Inseri o comando SQL e atribuir a conexão do banco de dados
            cmd = new SqlCommand(Sql, conn);
            //Executa o comando sql
            cmd.ExecuteNonQuery();
            //Fechar a conexão
            conn.Close();
        }

Consulta no banco de dados. Utilizar o parâmetro DataGridView para a exibição dos dados, e outro param entro para o comando SQL.
public void Consultar(DataGridView dgv, string Sql)
        {
            cmd = new SqlCommand(Sql, conn);
            conn.Open();

            //Diz que o comando é uma query(Texto) e não uma StoredProcedure
            cmd.CommandType = CommandType.Text;

            //O SqlDataAdapter serve para ligar os dados que estão num banco de
            //dados SQL Server com os objetos DataSet e DataTable.
            SqlDataAdapter da = new SqlDataAdapter(cmd);

            //representa a estrutura de uma tabela de um banco de dados.
            DataTable cliente = new DataTable();
           
            //Adiciona ou atualizar linhas em um intervalo especificado no
            //DataSet para que correspondam à fonte de dados usando o nome do DataTable, neste caso o 'cliente'
            da.Fill(cliente);

            //Define a Fonte de dados do DataGridView
            dgv.DataSource = cliente;

            //Fechar a conexão com o banco de dados
            conn.Close();

        }


Certo, finalizamos a camada de acesso a dados. No Próximo Tutorial estaremos desenvolvendo a camada de  Negócio.


Parte I = Clique aqui
Parte II = Clique aqui
Parte III = Clique aqui





10 comentários:

  1. muito bom parceiro parabéns seu blog é show...

    ResponderExcluir
  2. Cara, sou novo neste blog, sou recém formado em S.I, e tenho um breve conhecimento em C#. Pouco tempo observando este blog já percebi que você manda muito bem em C#. Eu tenho um sistema de movimentação de compra e venda, e eu gostaria de amplia-lo fazendo o mesmo imprimir cupom fiscal, até o momento não iniciei se quer pesquisas para realizar este objetivo. Caso você tenha algumas dicas e queira me passar eu agradeço desde já!
    meu msn: rafael_brambilla77@hotmail.com

    ResponderExcluir
  3. MIM ADD AI AMIGO TENHO ALGUMAS DOVIDAS Q GOSTARIA DE TIRA COM VC SE SER POSSIVEL SOU NOVO AQ NO BLOG E GOSTEI MUITO DOS MATEIAS VISTO NELE... rmixstudiorhaeldj@hotmail.com
    ABRAÇO...

    ResponderExcluir
  4. Amigo tenho uma duvida sobre o banco de dados!

    nesse caso o banco de dados fica dentro da pasta dados?

    ele fica embarcado na aplicação?

    ResponderExcluir
  5. Tenho que ter o SQLserver instalado nas maquinas onde vou instalar o sistema?

    desculpa as perguntas bobas!! mas é q estou começando em programação!

    ResponderExcluir
  6. kkk. Não é pergunta boba. Então, isso dependente, se for uma aplicação em rede, não é necessário ter o sql server instalado em cada computador, agora se for, apenas um computador ai sim, lembrando que é preciso adicionar a referencia do sql server na pasta bin.

    ResponderExcluir
  7. Cara, uma dúvida.
    As classes não estão conversando!
    Por exemplo, chamar a Banco, na classe Regranegocio, não está chamando.
    O que posso fazer?

    Obrigado!

    ResponderExcluir
  8. Olá Lucas, verifique se esta declarando o using da classe regra de negocio.

    ResponderExcluir
  9. Estranho estou seguindo passa a passo e gerou erro.Pode me ajudar, por gentileza..Ah muito boa sua iniciativa parabéns obrigado por nos ajudar.

    ResponderExcluir