.NET

8 abr, 2016

O padrão repositório revisitado – Parte 02

Publicidade

Neste artigo vamos rever os conceitos relacionados ao padrão repositório com um exemplo prático em uma aplicação ASP .NET MVC 5 usando a linguagem C#.

Na primeira parte do artigo, criamos a solução e os projetos Web e domínio da nossa aplicação. Já definimos também a nossa entidade de domínio, o nosso contexto e o repositório usado pela nossa aplicação.

Vamos, agora, implementar a nossa camada de negócios incluindo um novo projeto chamado Mvc_Repositorio.Negocio em nossa solução e definindo a(s) nossa(s) classe(s) de negócios.

Recursos usados:

Implementando a camada de Negócios (BLL)

Abra o projeto Mvc_Repositorio criado na versão do VS 2013 Express for web do artigo anterior. Agora vamos incluir um novo projeto do tipo Class Library em nossa solução.

No menu File, clique em Add -> Project e selecione o template Class Library e informe o nome Mvc_Repositorio.Negocio.

A seguir, vamos incluir uma referência neste projeto ao projeto Mvc_Repositoriio.Domino. Clique com botão direito sobre o nome do projeto e, a seguir, em Add -> Reference.

Selecione o projeto Mvc_Repositorio.Dominio e clique em OK:

net_rep23

Agora, vamos criar a classe UsuarioBLL nesse projeto. No menu PROJECT, clique em Add New Item.

Selecione o template class e informe o nome UsuarioBLL.cs. Depois defina os métodos nessa classe que irão implementar os métodos para atender as requisições da camada de apresentação relacionadas a entidade Usuário.

using Mvc_Repositorio.Dominio.Entidades;
using Mvc_Repositorio.Dominio.Repositorio;
using System.Collections.Generic;
using System.Linq;
namespace Mvc_Repositorio.Negocio
{
    public class UsuarioBLL
    {
        IUsuarioRepositorio _usuarioRepositorio;
        public UsuarioBLL()
        {
            _usuarioRepositorio = new UsuarioRepositorio();
        }
        public List<Usuario> Get_UsuarioInfo(int ID = -1)
        {
            if (ID == -1)
            {
                //retorna todos os usuarios
                return _usuarioRepositorio.GetTodos().ToList();
            }
            else
            {
                //retorna um determinado usuario pelo seu ID
                return _usuarioRepositorio.Get(p => p.UsuarioId == ID).ToList();
            }
        }
        public void AdicionarUsuario(Usuario emp)
        {
            _usuarioRepositorio.Adicionar(emp);
            _usuarioRepositorio.Commit();
        }
        public Usuario Localizar(int? id)
        {
            return _usuarioRepositorio.Procurar(id);
        }
        public void ExcluirUsuario(Usuario emp)
        {
            _usuarioRepositorio.Deletar(c => c == emp);
            _usuarioRepositorio.Commit();
        }
        public void AlterarUsuario(Usuario emp)
        {
            _usuarioRepositorio.Atualizar(emp);
            _usuarioRepositorio.Commit();
        }
    }
}

Na classe UsuarioBLL implementamos métodos para realizar as operações CRUD e selecionar dados usando o Repositório criado na camada de Domínio.

Eu não implementei um tratamento de exceção nesta classe para deixar o código mais simples. Mas é muito simples implementar isso.

Como exemplo, vou usar o método:

public void AdicionarUsuario(Usuario emp)
 {
            try
            {
                _usuarioRepositorio.Adicionar(emp);
                _usuarioRepositorio.Commit();
            }
            catch
            {
                throw;
            }
}

O tratamento é bem simples e não contamina a chamada de origem com erros ocorridos em outras camadas.

Vamos agora iniciar a implementação da camada de interface, mas antes vamos abrir o projeto Mvc_Repositorio (a nossa aplicação MVC) e, a seguir, abrir o arquivo Web.Config da solução.

Nesta arquivo, vamos incluir a string de conexão ConexaoUsuarios definida em nossa classe de contexto UsuarioContexto.

Inclua a seção <connectionStrings> conforme mostrada abaixo no arquivo Web.Config:

...
<connectionStrings>
    <add name="ConexaoUsuarios" connectionString="Data Source=.\sqlexpress;Initial Catalog=Cadastro;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
...

Pronto! Agora podemos continuar. E vamos criar o controlador UsuarioController na pasta Controllers do projeto Mvc_Repositorio.

Antes, temos que incluir uma referência no projeto Mvc_Repositorio aos projetos Mvc_Repositoriio.Domino e Mvc_Repositoriio.Negocio.

Clique com botão direito sobre o nome do projeto e, a seguir em Add -> Reference.

Selecione os projetos indicados na figura abaixo e clique em OK.

net_rep24

Agora temos acesso às entidades e ao repositório bem como na camada de negócios.

Vamos criar o controlador.

Clique com o botão direito do mouse sobre a pasta Controllers e, a seguir, em Add Controller;

Selecione o Scaffold – MVC 5 Controller with views, using Entity Framework -, e clique no botão Add.

net_rep21

Informe o nome UsuarioController, defina o Model Class como Usuário e Data context class como UsuarioContexto e marque Generate views e Use a layout page:

net_rep22

Como isso, nosso controlador UsuarioController será criado, mas se espiarmos o código iremos notar que ele está usando a classe de contexto para criar a instância das entidades e acessar os dados.

net_rep25

Precisamos alterar isso de forma que o controlador utilize a nossa camada de negócios e seus métodos.

Na próxima parte do artigo, vamos ajustar o código do controlador criado e concluir o nosso projeto.