Programação em camadas - Método 1

<< Click to Display Table of Contents >>

Navigation:  ASP.NET > Camadas >

Programação em camadas - Método 1

Previous pageReturn to chapter overviewNext page

Camada 1 - Model

 

Cliente.cs

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace VendasModel

{

    public class Cliente

    {

        public int Id { get; set; }

        public string Nome { get; set; }

        public string Cpf { get; set; }

        public string Email { get; set; }

        public string Sexo { get; set; }

        public DateTime Data { get; set; }

        public string EstadoCivil { get; set; }

    }

}

 


DAO - Data Access Object

 

ConexaoMySql.cs

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Data;

using MySql.Data.MySqlClient;

using VendasModel;

 

namespace VendasDAL

{

    public class ConexaoMySql : IDisposable

    {

        static private MySqlConnection conexao;

        static private ConexaoMySql conexaoMySql;

        static private MySqlTransaction transacao;

 

        public static ConexaoMySql GetConexaoMySql()

        {

            if (conexaoMySql == null)

                conexaoMySql = new ConexaoMySql();

 

            return conexaoMySql;

        }

 

        public void Conectar()

        {

            try

            {

                if (conexao == null)

                    conexao = new MySqlConnection("Server=localhost;Database=vendas;Uid=root;Pwd=123456;");

 

                if (conexao.State == ConnectionState.Closed)

                    conexao.Open();

 

                Retorno.Set(true);

            }

            catch (Exception e)

            {

                Retorno.Set(false, e.Message);

            }

        }

 

        public MySqlCommand Preparar(string sql)

        {

            MySqlCommand comando = new MySqlCommand(sql, conexao);

            comando.CommandType = CommandType.StoredProcedure;

            return comando;

        }

 

        public void Desconectar()

        {

            conexao.Close();

        }

 

        public static void StartTransaction()

        {

            ConexaoMySql con = GetConexaoMySql();

            con.Conectar();

            transacao = conexao.BeginTransaction();

        }

 

        public static void Commit()

        {

            transacao.Commit();

        }

 

        public static void Rollback()

        {

            transacao.Rollback();

        }

 

        public void Dispose()

        {

            Desconectar();

        }

    }

}

 

ClienteDAL.cs

 

using System;

using System.Data;

using System.Collections.Generic;

using MySql.Data.MySqlClient;

using VendasModel;

 

namespace VendasDAL

{

    public class ClienteDAL 

    {

        private static bool comando(ref Cliente cliente, string sql, bool paramOut = false)

        {

            ConexaoMySql conexao = ConexaoMySql.GetConexaoMySql();

 

            conexao.Conectar();

            if (!Retorno.Ok)

                return false;

 

            MySqlCommand cmd = conexao.Preparar(sql);

            cmd.CommandType = CommandType.StoredProcedure;

 

            cmd.Parameters.AddWithValue("iid", cliente.Id);

            cmd.Parameters.AddWithValue("inome", cliente.Nome);

            cmd.Parameters.AddWithValue("icpf", cliente.Cpf);

            cmd.Parameters.AddWithValue("isexo", cliente.Sexo);

            cmd.Parameters.AddWithValue("iemail", cliente.Email);

            cmd.Parameters.AddWithValue("idata", cliente.Data);

            cmd.Parameters.AddWithValue("iestado_civil", cliente.EstadoCivil);

 

            if (paramOut)

            {

                cmd.Parameters.Add("oid", MySqlDbType.Int32);

                cmd.Parameters["oid"].Direction = ParameterDirection.Output;

            }

 

            try

            {

                cmd.ExecuteNonQuery();

                if (paramOut)

                  cliente.Id = Convert.ToInt32(cmd.Parameters["oid"].Value);

            }

            catch (Exception e)

            {

                Retorno.Set(false, e.Message);

            }

 

            return Retorno.Ok;

        }

 

        public static bool Inserir(ref Cliente cliente)

        {

            return comando(ref cliente, "inserir_cliente", true);

        }

 

        public static bool Atualizar(Cliente cliente)

        {

            return comando(ref cliente, "atualizar_cliente");

        }

 

        public static bool Excluir(Cliente cliente)

        {

            return comando(ref cliente, "excluir_cliente");

        }

 

        private static Cliente Atribuir(MySqlDataReader dr)

        {

            Cliente cliente = new Cliente()

            {

                Id = int.Parse(dr["id_cliente"].ToString()),

                Nome = dr["nome"].ToString(),

                Cpf = dr["cpf"].ToString(),

                Data = Convert.ToDateTime(dr["data"].ToString()),

                Email = dr["email"].ToString(),

                EstadoCivil = dr["estado_civil"].ToString(),

                Sexo = dr["sexo"].ToString()

            };

            return cliente;

        }

 

        public static Cliente GetCliente(int id)

        {

            List<Cliente> lista = Listar();

            if (lista.Count > 0)

                return lista[0];

            else

                return new Cliente();

        }

 

        public static List<Cliente> Listar(int id = 0)

        {

            List<Cliente> lista = new List<Cliente>();

 

            // conecta com a base

            ConexaoMySql conexao = ConexaoMySql.GetConexaoMySql();

 

            // se não conseguiu conectar 

            conexao.Conectar();

            if (!Retorno.Ok)

                return lista;

 

            // cria o comando

            MySqlCommand cmd = conexao.Preparar("selecionar_cliente");

            cmd.Parameters.AddWithValue("iid", id);

 

            try

            {

                // pra cada linha lida vai montando a List<Cliente>

                using (MySqlDataReader dr = cmd.ExecuteReader())

                    while (dr.Read())

                        lista.Add(Atribuir(dr));

            }

            catch (Exception e)

            {

                Retorno.Set(false, e.Message);

            }

            return lista;

        }

    }

}

 


BLL - Business Layer

 

TransacaoBLL.cs

 

using System;

using VendasDAL;

 

namespace VendasBLL

{

    public static class TransacaoBLL

    {

        public static void Start()

        {

            ConexaoMySql.StartTransaction();

        }

 

        public static void Commit()

        {

            ConexaoMySql.Commit();

        }

 

        public static void RollBack()

        {

            ConexaoMySql.Rollback();

        }

    }

}

 

ClienteBLL.cs

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using VendasDAL;

using VendasModel;

 

namespace VendasBLL

{

    public class ClienteBLL

    {

        public static bool Inserir(ref Cliente cliente)

        {

            return ClienteDAL.Inserir(ref cliente);

        }

 

        public static bool Atualizar(Cliente cliente)

        {

            return ClienteDAL.Atualizar(cliente);

        }

 

        public static bool Excluir(Cliente cliente)

        {

            return ClienteDAL.Excluir(cliente);

        }

 

        public static Cliente GetCliente(int id)

        {

            return ClienteDAL.GetCliente(id);

        }

 

        public static List<Cliente> Listar()

        {

            return ClienteDAL.Listar();

        }

    }

}

 


UI

 

ListarCliente.cs

 

        public void RetornarClientes()

        {

            gridCliente.DataSource = ClienteBLL.Listar();

            gridCliente.DataBind();

        }

 

EditarCliente.cs

 

        protected void btnSalvar_Click(object sender, EventArgs e)

        {

            Cliente cliente = new Cliente()

            {

                Id = int.Parse(lblId.Text),

                Nome = txtNome.Text,

                Cpf = txtCPF.Text,

                Email = txtEmail.Text,

                Sexo = rblSexo.SelectedValue,

                EstadoCivil = ddlEstadoCivil.SelectedValue,

                Data = DateTime.Now

            };

 

            ClienteBLL.Atualizar(cliente);

 

            // deu erro?

            if (Retorno.Ok)

                Response.Redirect("ListarClientes.aspx");

            else

            {

                lblMsg.Text = Retorno.MsgErro;

                lblMsg.CssClass = "erro";

            }

        }

 

IncluirCliente.cs

 

            Cliente cliente = new Cliente()

            {

                Nome = txtNome.Text,

                Cpf = txtCPF.Text,

                Email = txtEmail.Text,

                Sexo = rblSexo.SelectedValue,

                EstadoCivil = rblEstadoCivil.SelectedValue,

                Data = DateTime.Now

            };

 

            TransacaoBLL.Start();

            ClienteBLL.Inserir(ref cliente);

 

            // deu erro?

            if (Retorno.Ok)

            {

                  TransacaoBLL.Commit();

                  Response.Redirect("ListarClientes.aspx");

                  return;

            }

 

            lblMsg.Text = Retorno.MsgErro;

            lblMsg.CssClass = "erro";

            TransacaoBLL.RollBack();

            lblMsg.Visible = true;

 

Retorno.cs

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace Model

{

  public static class Retorno

   {

      public static string MsgErro;

      public static bool Ok;

 

      public static void Set(bool ok, string msgErro)

       {

          Retorno.Ok = ok;

          Retorno.MsgErro = msgErro;

       }

 

      public static void Set(bool ok)

       {

          Retorno.Ok = ok;

          Retorno.MsgErro = "";

       }

   }

}

 


Base

 

Falta pegar o script da procedure