.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:


José Carlos Macoratti