.NET Core - Implementando o padrão Repositório - IV
Hoje veremos como implementar o padrão repositório na plataforma .NET Core. |
Continuando o artigo anterior vamos criar agora a camada de negócios (BLL).
O repositório é utilizado entre a camada de acesso a dados e a camada de negócios em uma arquitetura em camadas usando a abordagem clássica.
A camada de negócios é usada para se comunicar com o banco de dados através do contexto 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.
Abaixo vemos um esquema simplificado do fluxo e das dependências entre as camadas:
A responsabilidade da camada de negócios é fornecer métodos para o cliente usar na apresentação e persistência das informações.
Para atender as requisições da camada de apresentação temos que nos lembrar quais os objetivos a nossa aplicação vai cumprir e quais funcionalidades ela vai possuir.
Nossa aplicação deverá gerencias dados de clientes realizando as operações CRUD - Incluindo, alterando, excluindo e consultando dados.
Dessa forma como já temos o nosso repositório criado vamos definir na camada de negócio as interfaces para representar o repositório específico para a entidade Cliente.
Para isso temos que implementar um repositório para Clientes com base no repositório genérico criado. Vamos então criar uma interface IClienteRepository e a classe ClienteRepository que implementa esta interface.
Criando o projeto da camada de negócios
Vamos então incluir um novo projeto do tipo Class Library neste solução via menu File ->Add -> New Project;
Selecione o template Class Library(.NET Standard), informe o nome BusinessLogic e clique em OK;
Agora selecione o projeto e no menu PROJECT clique em Add New Item;
Selecione o template Interface, informe o nome IClienteRepository.cs e clique no botão Add;
A seguir defina o código a seguir para esta interface:
using DataAccess.Domain;
using DataAccess.Repository;
using System.Collections.Generic;
namespace BusinessLogic
{
public interface IClienteRepository : IRepository<Cliente>
{
IEnumerable<Cliente> GetClientesPorNome();
}
}
|
Observe que esta interface também herda da interface IRepository<T> onde T agora representa nossa entidade Cliente e que definimos um novo método para obter os clientes ordenados pelo nome.
Agora crie a classe ClienteRepository com o código a seguir:
using DataAccess.Context;
using DataAccess.Domain;
using DataAccess.Repository;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
namespace BusinessLogic
{
public class ClienteRepository : IRepository<Cliente>, IClienteRepository
{
AppDbContext _context;
public ClienteRepository(AppDbContext context)
{
_context = context;
}
public void Add(Cliente entity)
{
_context.Clientes.Add(entity);
}
public void Delete(Cliente entity)
{
_context.Clientes.Remove(entity);
}
public IEnumerable<Cliente> Get()
{
return _context.Clientes.ToList();
}
public void Update(Cliente entity)
{
_context.Clientes.Update(entity);
}
public IEnumerable<Cliente> Get(Expression<Func<Cliente, bool>> predicate)
{
return _context.Clientes.Where(predicate);
}
public Cliente GetById(Expression<Func<Cliente, bool>> predicate)
{
return _context.Clientes.FirstOrDefault(predicate);
}
public IEnumerable<Cliente> GetClientesPorNome()
{
return Get().OrderBy(c => c.Nome).ToList();
}
}
}
|
Neste código implementamos os métodos do nosso repositório genérico para a entidade Cliente materializando assim as operações para poder realizar o CRUD nas informações de Clientes. Temos assim um repositório específico para Cliente.
Vamos criar a classe ClienteBusinessLogic que vai se comunicar com a camada de apresentação e com o repositório usando a Unit Of Work.
Crie a classe ClienteBusinessLogic com o código abaixo:
using DataAccess.Domain;
using DataAccess.Repository;
using System;
using System.Collections.Generic;
namespace BusinessLogic
{
public class ClienteBusinessLogic : IDisposable
{
UnitOfWork _uow;
public ClienteBusinessLogic(UnitOfWork uow)
{
_uow = uow;
}
public ClienteBusinessLogic()
{
_uow = new UnitOfWork();
}
public IEnumerable<Cliente> ListarClientes()
{
return _uow.ClienteRepository.Get();
}
public void AdicionarCliente(Cliente cli)
{
_uow.ClienteRepository.Add(cli);
_uow.Commit();
}
public void ExcluirCliente(Cliente cli)
{
_uow.ClienteRepository.Delete(cli);
_uow.Commit();
}
public void AlterarCliente(Cliente cli)
{
_uow.ClienteRepository.Update(cli);
_uow.Commit();
}
public Cliente GetClientePorId(int codigo)
{
return _uow.ClienteRepository.GetById(c => c.ClienteId == codigo);
}
public void Dispose()
{
_uow.Dispose();
}
}
}
|
Observe que temos dois construtores, um onde injetamos uma instância da unit-of-work e outro onde criamos uma instância da classe UnitOfWork.
A seguir criamos os métodos que usam os métodos do nosso repositório ClienteRepository via unit-of-work.
Temos assim tudo pronto e já podemos testar a nossa aplicação.
Na próxima parte do artigo vamos criar o projeto Console para testar a nossa implementação.
"E Jesus lhes
respondeu: Meu Pai trabalha até agora, e eu trabalho também."
João 5:17
Veja os
Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique
e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
Jose C Macoratti (@macorati) | TwitterSeção Entity Framework - Macoratti .NET