model-view-presenter

Esta es la cuarta parte de este tutorial del ejemplo para usar el patron Model View Presenter. Aqui veremos el uso de la capa de negocio y de datos para terminar la estructura de nuestro Proyecto. Vean la primera parte, la segunda parte y tercera parte para que vean el ejercicio completo.

Como vimos en la 3ra parte de este ejercicio, creamos y enlazamos los proyectos Web y Presenter mas la implementacion de la Vista de usuario. Aqui retomaremos en el metodo del Presenter (que es llamado por la capa Web) que utilizara un metodo de Negocio para entregar la Lista de Entidades que la Vista requiere.

mvp-menu-capa-negocio

Aqui el metodo se llamara ObtenerMenuItems() y devolvera una lista de entidades del tipo IList. El codigo completo es asi:

    using System;
    using System.Collections.Generic;
    using System.Text;

    using Entity;
    using AccessData;

    namespace Business
    {
    public class MenuNegocio
    {
    public IList<MiMenuItem> ObtenerMenuItems()
    {
    MenuDatos datos = new MenuDatos();
    IList<MiMenuItem>lista;

    lista = datos.ObtenerMenuItems();

    return lista;
    }
    }
    }    

Ahora veremos la Capa de Datos con los metodos respectivos:

mvp-menu-capa-datos

Aqui en la Clase MenuDatos.cs, manejaremos la conexion a la base de datos y nos apoyaremos para esto en su constructor:

    private string connectionString;

    public MenuDatos()
    {
    connectionString = GetConnectionString();
    }

    private string GetConnectionString()
    {
    return “Data Source=mi-pc\\sqlexpress;Database=Menu;Integrated Security=SSPI;”;
    }

mvp-menu-datos-metodos

El metodo que construira la Lista de Entidades para el menu dinamico se llamara igual que en en la Capa de Negocios ObtenerMenuItems():

    public IList<MiMenuItem> ObtenerMenuItems()
    {
    IList<MiMenuItem> lista = new List<MiMenuItem>();
    MiMenuItem item;

    SqlConnection connection;
    SqlCommand command = new SqlCommand();
    SqlParameter parameter = new SqlParameter();
    SqlDataReader reader;

    using (connection = new SqlConnection(connectionString))
    {
    connection.Open();
    command.Connection = connection;
    command.CommandType = CommandType.StoredProcedure;
    command.CommandText = “ObtenerOpcionesMenu”;

    reader = command.ExecuteReader();
    while (reader.Read())
    {
    item = new MiMenuItem();
    int id;
    int nodopadre;
    int pos;

    //con TryParse se evita en la conversion un error en tiempo de ejecucion
    if (!int.TryParse(reader["MenuId"].ToString(),out id))
    {
    id=0;
    }
    item.MenuId = id;
    item.NombreMenu = reader["NombreMenu"].ToString();
    item.DescripcionMenu = reader["DescripcionMenu"].ToString();
    if (!int.TryParse(reader["PadreId"].ToString(),out nodopadre))
    {
    nodopadre=0;
    }
    item.PadreId = nodopadre;
    if (!int.TryParse(reader["Posicion"].ToString(), out pos))
    {
    pos = 0;
    }
    item.Posicion = pos;
    item.Icono = reader["Icono"].ToString();
    //otra forma de conversion pero puede haber error de ejecucion
    //si la data del campo no es posible de convertir
    item.Habilitado = (bool)reader["Habilitado"];
    item.Url = reader["Url"].ToString();

    lista.Add(item);
    }

    }

    return lista;
    }

Ahora veremos como se ejecuta todo este codigo .NET asi que usaremos los puntos de interrupcion (F9)

Capa Web

Todo parte en el metodo Page_Load

mvp-menu-web-page-load

Luego, vamos al presenter como ilustra la imagen.

Capa Presenter

Aqui es donde se llamara al metodo de negocio respectivo. Para este caso no hay ningun valor que rescatar de la Vista de Usuario, solo se modificara.

mvp-menu-presenter-uso-metodo

Capa Negocio

Aqui es donde se llamara al metodo de datos respectivo y se devolvera la lista de entidades que sea generada.

mvp-menu-negocio-uso-metodo

Capa Datos

Aqui se hace la conexion a la base de datos y ejecucion del Procedimiento Almacenado. Se recorre el reader de datos para generar la lista de Entidades que se devuelve al final de la funcion.

mvp-menu-datos-uso-metodo

Aqui agrego al Wath (Inspeccion Rapida) la variable “lista” y veo que su contenido tiene 6 Entidades para los items del Menu.

mvp-menu-datos-uso-metodo

Aqui se ve el detalle de cada entidad que viene en la lista

mvp-menu-datos-uso-metodo

Una vez ejecutado este Metodo en la capa de Datos, la lista se devuelve a Negocios y de ésta al Presenter.

Capa Presenter recibiendo la Lista de Entidades

Aqui vemos como la lista se asigna a la propiedad la vista ListaItemsMenu

mvp-menu-presenter-uso-metodo-lista

De aca pasamos a la pagina web donde esta implementada la Vista.

Capa Web: La Vista implementada usando la Lista de Entidades

mvp-menu-web-uso-vista

Finalmente, la propiedad de la Vista genera dinamicamente el Menu ASP .NET

mvp-menu-web-final

Bueno, aqui termino el tutorial para el uso del patron MVP. Espero que les sirva de ayuda y aclare dudas “existenciales” que posean😉

El codigo y el proyecto completo bajenlo aqui.

TYDW.-