O padrão repositório revisitado – Parte 03
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#.
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 segunda parte do artigo, implementamos a camada de negócios (BLL), definimos a string de conexão no arquivo web.Config e criamos o controlador UsuarioController usando o Scaffold, de forma a ter os métodos Actions e as views criadas automaticamente.
Vamos concluir o nosso projeto fazendo os ajustes no controlador UsuarioController, utilizando a nossa camada de negócios e o nosso repositório.
Recursos usados:
Ajustando o controlador para usar a camada de negócios e o repositório
Abra o projeto Mvc_Repositorio criado na versão do VS 2013 Express for web do artigo anterior.
Em seguida, abra o arquivo UsuarioController.cs da pasta Controllers.
Altere o código desse controlador conforme mostrado a seguir:
using System.Net;
using System.Web.Mvc;
using Mvc_Repositorio.Dominio.Entidades;
using Mvc_Repositorio.Negocio;
namespace Mvc_Repositorio.Controllers
{
public class UsuarioController : Controller
{
private UsuarioBLL _usuarioBll;
public UsuarioController()
{
_usuarioBll = new UsuarioBLL();
}
public ActionResult Index()
{
return View(_usuarioBll.Get_UsuarioInfo());
}
// GET: Usuario/Details/5
public ActionResult Details(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Usuario usuario = _usuarioBll.Localizar(id);//db.Usuarios.Find(id);
if (usuario == null)
{
return HttpNotFound();
}
return View(usuario);
}
// GET: Usuario/Create
public ActionResult Create()
{
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "UsuarioId,Nome,Senha,Email")] Usuario usuario)
{
if (ModelState.IsValid)
{
_usuarioBll.AdicionarUsuario(usuario);//db.Usuarios.Add(usuario);
//_usuarioBll.db.SaveChanges();
return RedirectToAction("Index");
}
return View(usuario);
}
// GET: Usuario/Edit/5
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Usuario usuario = _usuarioBll.Localizar(id);//db.Usuarios.Find(id);
if (usuario == null)
{
return HttpNotFound();
}
return View(usuario);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "UsuarioId,Nome,Senha,Email")] Usuario usuario)
{
if (ModelState.IsValid)
{
_usuarioBll.AlterarUsuario(usuario);
//db.Entry(usuario).State = EntityState.Modified;
//db.SaveChanges();
return RedirectToAction("Index");
}
return View(usuario);
}
// GET: Usuario/Delete/5
public ActionResult Delete(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Usuario usuario = _usuarioBll.Localizar(id);//db.Usuarios.Find(id);
if (usuario == null)
{
return HttpNotFound();
}
return View(usuario);
}
// POST: Usuario/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(int id)
{
Usuario usuario = _usuarioBll.Localizar(id);//db.Usuarios.Find(id);
_usuarioBll.ExcluirUsuario(usuario);//db.Usuarios.Remove(usuario);
//db.SaveChanges();
return RedirectToAction("Index");
}
}
}
}
No código acima, eu criei uma instância da nossa camada de negócio no construtor do controlador UsuarioController:
private UsuarioBLL _usuarioBll;
public UsuarioController()
{
_usuarioBll = new UsuarioBLL();
}
Dessa forma, agora basta substituir o código que usava a instância do contexto pela instância da nossa camada de negócio.
O código em azul foi incluído e o código anterior foi comentado e colorido na cor verde.
Note que estamos usando a instância _usuarioBll para acessar os métodos da camada de negócio e que agora a implementação da camada de acesso a dados é transparente para nossa interface.
Feito isso, não precisamos alterar nenhuma view gerada pelo Scaffold (apenas fazer as traduções para o português, se você desejar).
Vou alterar o arquivo _Layout.cshtml da pasta \Views\Shared incluindo uma imagem em todas as views:
Note que a imagem Cadastro.png que eu usei está na pasta Imagens criada no projeto.
Executando o projeto, iremos obter o seguinte resultado:
Com isso, fizemos uma revisão de conceitos sobre o padrão repositório usando uma abordagem bem simples para mostrar a sua importância.
Em outro artigo, vou abordar a injeção de dependência que pode ser usada para desacoplar ainda mais os nossos projetos e que poderia ser aplicada a esse exemplo.
Pegue o projeto completo aqui: Mvc_Repositorio.zip (sem as referências).










