.NET - O padrão Repositório revisitado - III
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 de forma a utilizar 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;
Vamos abra o arquivo UsuarioController.cs da pasta Controllers.
Altere o código deste 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 esta 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)
Porque a palavra
de Deus é viva e eficaz, e mais penetrante do que espada alguma de dois gumes, e
penetra até à divisão da alma e do espírito, e das juntas e medulas, e é apta
para discernir os pensamentos e intenções do coração.
Hebreus 4:12
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: