Anexsoft | Blog y dictado de cursos de Tecnología

En este encontrarás tutoriales de tecnología como PHP, ASP.NET MVC, Front-End, entre otros y cursos exigentes de modalidad online que te ayudarán a crecer profesionalmente.

ASP.NET MVC usando ADO.NET y las 3 Capas
Actualizado el 21 Enero, 2016 y leído 24,282 veces
Calificación: 9.56 / 10

ASP.NET MVC usando ADO.NET y las 3 Capas

Anexsoft

Queridos programadores por ahí surgio la duda de como programar en MVC usando mi antigua lógica, pues les paso un proyecto muy simple donde enseño a programar usando las 3 capas.

El proyecto consiste en un simple CRUD de una tabla Usuarios.

Para mi proyecto le he puesto a las capas los siguientes nombres

  • DAL, se encarga de realizar las consultas a la base de datos, la cual debe hacer una referencia a la capa ET

  • BL, se encarga de realizar la lógica de negocio, comunica la entidad con la capa de dato, referencia a la capa ET y DAL

  • ET, nuestras entidades que vienen a presentar nuestas tablas

  • Web, sera nuestro proyecto MVC, referencia a BL Y ET

Image title

Entonces creamos nuestras clases dentro de cada capa como hacemos siempre.

Entidad (ET)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ET
{
    public class Usuario
    {
        public int id { get; set;}
        public string Nombre{ get; set; }
        public string Apellido { get; set; }
        public int Rol_id { get; set; }

        public Rol Rol { get; set; }

        public Usuario() 
        {
            Rol = new Rol();
        }
    }
}

Logica de negocio (BL)

using DAL;
using ET;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BL
{
    public class UsuarioBL
    {
        private UsuarioDAL usuarioDAL = new UsuarioDAL();

        public List<Usuario> Listar()
        {
            return usuarioDAL.Listar();
        }
        public Usuario Obtener(int id)
        {
            return usuarioDAL.Obtener(id);
        }

        public bool Actualizar(Usuario usuario)
        {
            return usuarioDAL.Actualizar(usuario);
        }

        public bool Registrar(Usuario usuario)
        {
            return usuarioDAL.Registrar(usuario);
        }

        public bool Eliminar(int id)
        {
            return usuarioDAL.Eliminar(id);
        }
    }
}

Acceso a datos (DAL)

using ET;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Configuration;

namespace DAL
{
    public class UsuarioDAL
    {
        public List<Usuario> Listar() 
        {
            var usuarios = new List<Usuario>();

            try
            {
                using (var con = new SqlConnection(ConfigurationManager.ConnectionStrings["Colegio"].ToString())) 
                {
                    con.Open();

                    var query = new SqlCommand("SELECT * FROM usuario", con);
                    using (var dr = query.ExecuteReader()) 
                    {
                        while (dr.Read()) 
                        {
                            // Usuario
                            var usuario =  new Usuario { 
                                id = Convert.ToInt32(dr["id"]),
                                Nombre = dr["Nombre"].ToString(),
                                Apellido = dr["Apellido"].ToString(),
                                Rol_id = Convert.ToInt32(dr["Rol_id"]),
                            };

                            // Agregamos el usuario a la lista genreica
                            usuarios.Add(usuario);
                        }
                    }

                    // Agregamos el ROL
                    foreach (var u in usuarios) 
                    {
                        query = new SqlCommand("SELECT * FROM rol WHERE id = @id", con);
                        query.Parameters.AddWithValue("@id", u.Rol_id);

                        using (var dr = query.ExecuteReader())
                        {
                            dr.Read();
                            if (dr.HasRows)
                            {
                                u.Rol.id = Convert.ToInt32(dr["id"]);
                                u.Rol.Nombre = dr["Nombre"].ToString();
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw;
            }

            return usuarios;
        }

        public Usuario Obtener(int id)
        {
            var usuario = new Usuario();

            try
            {
                using (var con = new SqlConnection(ConfigurationManager.ConnectionStrings["Colegio"].ToString()))
                {
                    con.Open();

                    var query = new SqlCommand("SELECT * FROM usuario WHERE id = @id", con);
                    query.Parameters.AddWithValue("@id", id);

                    using (var dr = query.ExecuteReader())
                    {
                        dr.Read();
                        if (dr.HasRows) {
                            usuario.id = Convert.ToInt32(dr["id"]);
                            usuario.Nombre = dr["Nombre"].ToString();
                            usuario.Apellido = dr["Apellido"].ToString();
                            usuario.Rol_id = Convert.ToInt32(dr["Rol_id"]);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw;
            }

            return usuario;
        }

        public bool Actualizar(Usuario usuario)
        {
            bool respuesta = false;

            try
            {
                using (var con = new SqlConnection(ConfigurationManager.ConnectionStrings["Colegio"].ToString()))
                {
                    con.Open();

                    var query = new SqlCommand("UPDATE Usuario SET Nombre = @p0, Apellido = @p1, Rol_id = @p2 WHERE id = @p3", con);

                    query.Parameters.AddWithValue("@p0", usuario.Nombre);
                    query.Parameters.AddWithValue("@p1", usuario.Apellido);
                    query.Parameters.AddWithValue("@p2", usuario.Rol_id);
                    query.Parameters.AddWithValue("@p3", usuario.id);

                    query.ExecuteNonQuery();

                    respuesta = true;
                }
            }
            catch (Exception ex)
            {
                throw;
            }

            return respuesta;
        }

        public bool Registrar(Usuario usuario)
        {
            bool respuesta = false;

            try
            {
                using (var con = new SqlConnection(ConfigurationManager.ConnectionStrings["Colegio"].ToString()))
                {
                    con.Open();

                    var query = new SqlCommand("INSERT INTO Usuario(Nombre, Apellido, Rol_id) VALUES (@p0, @p1, @p2)", con);

                    query.Parameters.AddWithValue("@p0", usuario.Nombre);
                    query.Parameters.AddWithValue("@p1", usuario.Apellido);
                    query.Parameters.AddWithValue("@p2", usuario.Rol_id);

                    query.ExecuteNonQuery();

                    respuesta = true;
                }
            }
            catch (Exception ex)
            {
                throw;
            }

            return respuesta;
        }

        public bool Eliminar(int id)
        {
            bool respuesta = false;

            try
            {
                using (var con = new SqlConnection(ConfigurationManager.ConnectionStrings["Colegio"].ToString()))
                {
                    con.Open();

                    var query = new SqlCommand("DELETE FROM usuario WHERE id = @p0", con);
                    query.Parameters.AddWithValue("@p0", id);
                    query.ExecuteNonQuery();

                    respuesta = true;
                }
            }
            catch (Exception ex)
            {
                throw;
            }

            return respuesta;
        }
    }
}

Y así tenemos la lógica que nos enseñaron en clase.

¿Nuestro controlador como lo tenemos?

using BL;
using ET;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace Web.Controllers
{
    public class DefaultController : Controller
    {
        private UsuarioBL usuarioBL = new UsuarioBL();
        private RolBL rolBL = new RolBL();

        public ActionResult Index()
        {
            return View(usuarioBL.Listar());
        }

        public ActionResult Editar(int id = 0) 
        {
            ViewBag.Roles = rolBL.Listar();
            return View(id == 0 ? new Usuario() : usuarioBL.Obtener(id));
        }

        public ActionResult Guardar(Usuario usuario)
        {
            var r = usuario.id > 0 ? 
                    usuarioBL.Actualizar(usuario) : 
                    usuarioBL.Registrar(usuario);

            if (!r) 
            {
                // Podemos validar para mostrar un mensaje personalizado, por ahora el aplicativo se caera por el throw que hay en nuestra capa DAL
                ViewBag.Mensaje = "Ocurrio un error inesperado";
                return View("~/Views/Shared/_Mensajes.cshtml");
            }

            return Redirect("~/");
        }

        public ActionResult Eliminar(int id)
        {
            var r = usuarioBL.Eliminar(id);

            if (!r)
            {
                // Podemos validar para mostrar un mensaje personalizado, por ahora el aplicativo se caera por el throw que hay en nuestra capa DAL
                ViewBag.Mensaje = "Ocurrio un error inesperado";
                return View("~/Views/Shared/_Mensajes.cshtml");
            }

            return Redirect("~/");
        }
    }
}

Espero que te haya servido el material, con esto le has dado una vista global al proyecto y seguro te servira por si quieres seguir trabajando con ADO.NET puro.

De todas formas bajate el proyecto para que entiendas el material explicado en esta entrada.

¡Adquiera ya!

  • Código de fuente de Red Social desarrollada en ASP.NET MVC

    Código de fuente de Red Social desarrollada en ASP.NET MVC
  • Software de Venta e Inventario hecho en PHP y Codeigniter

    Software de Venta e Inventario hecho en PHP y Codeigniter
  • Software de Portafolio Profesional hecho en ASP.NET MVC 5 C#

    Software de Portafolio Profesional hecho en ASP.NET MVC 5 C#

Últimas publicaciones

Encuesta

¿Cómo nos conociste?

Síguenos

Estudia con nosotros y crece profesionalmente

Nuestros cursos han sido hecho en base a lo que demanda el mercado hoy en día.
La experiencia obtenida es la de un ambiente laboral.

Anexsoft
© 2017 Anexsoft, blog y cursos online de TI.