.NET

10 mar, 2015

EF 6 – Criando a camada de negócios (BLL) – Parte 05

Publicidade

Neste artigo vamos continuar o nosso exemplo anterior, criando a camada de negócios (BLL – Business Logic Layer).

O repositório é utilizado entre a camada DAL e a camada de negócios (BLL) em uma arquitetura em camadas. A camada de negócios é usada para se comunicar com o banco de dados através do Entity Data Model na camada de acesso a dados. Assim, quando a camada de apresentação requisitar ou enviar dados, ela se comunica com a camada de negócios sem se importar como os dados são mantidos ou persistidos.

A responsabilidade da camada de negócios é fornecer métodos para o cliente usar na apresentação e persistência das informações. Então, vamos arregaçar as mangas e partir para o trabalho!

Para atender as requisições da camada de apresentação, temos que nos lembrar quais objetivos a nossa aplicação vai cumprir e quais funcionalidades ela vai possuir. Ela deverá manter empregados e departamentos realizando as operações CRUD – incluindo, alterando, excluindo e consultando dados. Para isso, vamos criar um cadastro de empregados, de departamentos e um módulo de consulta onde iremos exibir os empregados por departamento.

No primeiro artigo, nós geramos o nosso Entity Data Model, onde obtivemos as entidades Departamento e Empregado.

Dessa forma, como já temos o nosso repositório criado, vamos definir na camada DAL as interfaces para representar os repositórios específicos para as entidades Empregado e Departamento.

Então selecione o projeto DAL e no menu PROJECT clique em Add New Item. Selecione o template Interface, informe o nome IEmpregadoRepositorio.cs e clique no botão Add. Em seguida, defina o código a seguir para a interface IEmpregadoRepositorio:

using Model;
namespace DAL
{
    public interface IEmpregadoRepositorio : IRepositorio<Empregado>
    {
    }
}

Repita o procedimento anterior e crie a interface IDepartamentoRepositorio.cs com o código mostrado abaixo:

using Model;
namespace DAL
{
    public interface IDepartamentoRepositorio : IRepositorio<Departamento>
    {
    }
}

Deveremos criar também as classes que implementam as interfaces IEmpregadoRepositorio e IDepartamentoRepositorio na camada DAL.

Então, selecione o projeto DAL e no menu PROJECT clique em Add New Item. Selecione o template Class, informe o nome EmpregadoRepositorio.cs e clique no botão Add. A seguir, defina o código a seguir para a classe EmpregadoRepositorio:

using Model;
namespace DAL
{
    public class EmpregadoRepositorio : Repositorio<Empregado>, IEmpregadoRepositorio
    {
    }
}

Repita o procedimento anterior e crie a classe DepartamentoRepositorio.cs com o código mostrado abaixo:

using Model;
namespace DAL
{
    public interface DepartamentoRepositorio : Repositorio<Departamento>, IDepartamentoRepositorio
    {
    }
}

Observe que não precisamos definir nenhum código nas interfaces e classes acima, pois estamos usando o mecanismo da herança e da implementação da interface e assim estamos usando os métodos definidos na interface IRepositorio e na classe Repositorio. Note também que estamos usando as entidades que foram separadas no projeto Model.

Neste momento, nossa solução tem a seguinte estrutura:

ef6_dalrp51

Vemos dois projetos: DAL e Model. Agora, sim, vamos incluir um novo projeto na solução que será a nossa camada de acesso a dados.

No menu FILE, clique em Add -> New Project.

A seguir, selecione o template Class Library e informe o nome BLL e clique no botão OK.

ef6_dalrp52

Remova o arquivo Class1 criado por padrão no projeto. Antes de prosseguir, vamos incluir referências aos projetos DAL e Model no projeto BLL.

Selecione o projeto BLL e no menu PROJECT clique em Add Reference.

A seguir, clique na guia Solution e marque as opções DAL e Model e clique no botão OK.

ef6_dalrp53

Agora vamos definir duas classes na camada BLL que irão implementar os métodos para atender as requisições da camada de apresentação relacionadas às entidadesEmpregado e Departamento.

Selecione o projeto BLL e no menu PROJECT clique em Add Class. Depois informe o nome EmpregadoBLL e clique no botão Add. A seguir, inclua o código abaixo na classe EmpregadoBLL:

using System.Collections.Generic;
using System.Linq;
using Model;
using DAL;
namespace BLL
{
    public class EmpregadoBLL
    {
        IEmpregadoRepositorio _empregadoRepositorio;
        public EmpregadoBLL()
        {
            //cria uma instância do repositorio Empregado
            _empregadoRepositorio = new EmpregadoRepositorio();
        }
        public List<Empregado> GetEmpregadosPorDepartamento(int departamentoId)
        {
            return _empregadoRepositorio.Get(e => e.DepartamentoId == departamentoId).ToList();
        }
        public List<Empregado> Get_EmpregadoInfo(int ID = -1)
        {
            if (ID == -1)
            {
                //retorna todos os Empregados
                return _empregadoRepositorio.GetTodos().ToList();
            }
            else
            {
                //retorna um determinado Empregado pelo seu ID
                return _empregadoRepositorio.Get(p => p.EmpregadoId == ID).ToList();
            }
        }
        public void AdicionarEmpregado(Empregado emp)
        {
            _empregadoRepositorio.Adicionar(emp);
            _empregadoRepositorio.Commit();
        }
        public Empregado Localizar(int id)
        {
            return _empregadoRepositorio.Find(id);
        }
        public void ExcluirEmpregado(Empregado emp)
        {
            _empregadoRepositorio.Deletar(c => c == emp);
            _empregadoRepositorio.Commit();
        }
        public void AlterarEmpregado(Empregado emp)
        {
            _empregadoRepositorio.Atualizar(emp);
            _empregadoRepositorio.Commit();
        }
    }
}

Na classe EmpregadoBLL, implementamos métodos para realizar as operações CRUD e selecionar dados usando o Repositorio criado na camada DAL. Eu não implementei um tratamento de exceção nesta classe, farei isso na classe DepartamentoBLL para mostrar como fazer e aí você implementa,ok?!

Vamos repetir o procedimento acima e criar a classe DepartamentoBLL e definir os métodos relacionados com a entidade Departamento.

Selecione o projeto BLL e no menu PROJECT clique em Add Class. Depois informe o nome DepartamentoBLL e clique no botão Add. A seguir, inclua o código abaixo na classe DepartamentoBLL:

using System.Collections.Generic;
using System.Linq;
using Model;
using DAL;
using System;
namespace BLL
{
    public class DepartamentoBLL
    {
        IDepartamentoRepositorio _departamentoRepositorio;
        public DepartamentoBLL()
        {
            try
            {
                //cria uma instância do repositorio departamento
                _departamentoRepositorio = new DepartamentoRepositorio();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public List<Departamento> Get_DepartamentoInfo(int ID = -1)
        {
            try
            {
                if (ID == -1)
                {
                    //retorna todos os departamentos
                    return _departamentoRepositorio.GetTodos().ToList();
                }
                else
                {
                    //retorna um determinado departamento pelo seu ID
                    return _departamentoRepositorio.Get(p => p.DepartamentoId == ID).ToList();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public void AdicionarDepartamento(Departamento dep)
        {
            try
            {
                _departamentoRepositorio.Adicionar(dep);
                _departamentoRepositorio.Commit();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public Departamento Localizar(int id)
        {
            try
            {
                return _departamentoRepositorio.Find(id);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public void ExcluirDepartamento(Departamento dep)
        {
            try
            {
                _departamentoRepositorio.Deletar(c => c == dep);
                _departamentoRepositorio.Commit();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public void AlterarDepartamento(Departamento dep)
        {
            try
            {
                _departamentoRepositorio.Atualizar(dep);
                _departamentoRepositorio.Commit();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
}

Dessa forma já temos nossa camada de negócios (BLL) pronta para atender as requisições da camada de apresentação.

Na próxima parte do artigo vamos definir a nossa camada de apresentação.