Ticker

6/recent/ticker-posts

Agregar modelo ASP.NET MVC - Fase II

Bueno, inicio esta siguiente fase esperando que sea útil para todos ustedes y a esperar el año 2016 que sea de muchas bendiciones y éxitos en todo lo que nos espera. Para los que están interesado el como iniciar en crear un proyecto les dejo en siguiente link Crear Proyecto ASP.NET MVC - Fase I 

Ahora implementaremos el modelo, controlador y vistas (en diferentes fases), digamos estas 3 palabras son las que encapsula toda implementación cuando se realiza bajo este padrón denominado MVC. Esta claro que a lo largo iremos viendo algunos concepto esenciales en toda nuestra implementación.

Para esto vamos a conceptualizar y detallar algunos puntos sobre el Modelo.

Modelos: Es el conjunto de clases (entidades o tablas que estén asociados con el modelo de datos) que representan el dominio de la aplicación. Actualmente se puede realizar diferentes tipos de implementación, incluso usando ORM de terceros con el Dapper.Net, entre otros. Algunas implemntaciones más usadas hasta ahora son:
  1. Entity Framework Database First: Consiste en crear un modelo de clases a partir de una base de datos existente usando el diseñador del Visual Studio.
  2. Entity Framework Model First: Consiste en crear un modelo de clases usando el diseñador que es provisto por el Visual Studio y a partir de este se crea la base de datos.
  3. Entity FrameworkCode First: Consiste en hacer uso de solamente código para crear el modelo de clases, sin depender de una herramienta de diseño, y a partir de este se crea la base de datos.
  4. Y también esta el Data Access Application Block del Enterprise Library que toma mucha fuerza en estos últimos tiempos, espero profundizar más adelante.
Hay mucha teoría por plasmar, si hay tiempo espero plasmar muchísima más teórica - en lo personal es lo primordial para todo aprendizaje. Con este poquísima teoría quiero iniciar la parte practica.

Ah, el modulo que decidí implementar será acerca del control de acceso a usuarios, es decir usare como modelo la base de datos que en su momento hice publico en el siguiente articulo Modulo de Control de Acceso - Primera Fase, todo sera basado en este modelo, sería genial que le den una leída. Otro de los detalles a considerar es que utilizare como acceso a datos el ORM Dapper (de paso voy aprendiendo a usar este orm que es light, más adelante haremos algo con Entity FrameworkData Access Application Block del Enterprise Library) y algo de T-SQL (implementare algunos procedimientos almacenados)

1.  Iniciamos el modelo de la base de datos que se hará uso por ahora sólo serán las 3 primera entidades (tablas) para el acceso del login.

2.  Creamos 2 procedimientos almacenados:
     2.1. Para la captura del id del usuario a logearse


USE [BD_SISTEMA]
GO
/****** Object:  StoredProcedure [dbo].[SP_GET_IDUSUARIO]    Script Date: 12/31/2015 18:07:46 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[SP_GET_IDUSUARIO]
@PV_USUARIO VARCHAR(20)   
AS   
BEGIN
 SELECT ID_USUARIO
 FROM BD_SISTEMA.dbo.SEG_USUARIO
 WHERE USUARIO = @PV_USUARIO
END

     2.2. Para la captura de la descripción del rol a donde pertenece el id usuario.


USE [BD_SISTEMA]
GO
/****** Object:  StoredProcedure [dbo].[SP_GET_DES_ROL_IDUSUARIO]    Script Date: 12/31/2015 18:07:50 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[SP_GET_DES_ROL_IDUSUARIO] 
@PN_ID_USUARIO NUMERIC(8)
AS 
BEGIN
 SELECT R.DES_ROL FROM BD_SISTEMA.dbo.SEG_USUARIO_ROL UR
    INNER JOIN BD_SISTEMA.dbo.SEG_ROL R
 ON R.ID_ROL = UR.ID_ROL
 WHERE UR.ID_USUARIO = @PN_ID_USUARIO
END

Con estos 2 pasos iniciales pasaremos a implementar nuestra app mvc:

3.  Creamos nuestro modelo de nombre login, clic en el directorio model, agregar clase,


Definamos el nombre, por ahora solo estoy haciendo referencia a la entidad SEG_USUARIO y los campos usuario y password (por ahora).

Consideración: Para el uso de las anotaciones deben importar los el espacio de nombre using System.ComponentModel.DataAnnotations, casi en su mayoría de las implementaciones son frecuentes las anotaciones.

4.  Antes de continuar con la implementaciones de las calses, vamos a configurar el archivo de configuración, es decir en archivo Web.config de la raíz principal de nuestro proyecto (no confundir con el archivo que se genera internamente en el directorio Views) agregamos nuestra cadena de configuración.
<connectionstrings>
    <add connectionstring="Data Source=.;Database=BD_SISTEMA;UID=sa;Password=xxx" name="ConnectionBD" providername="System.Data.SqlClient">
    </add>
</connectionstrings>

4.1. Así mismo se hará el siguiente cambio - en la línea de autentificación loginUrl (es solo para que sea algo distinto y poder familiarizarnos con los controladores y acciones).
<authentication mode="Forms">
    <!--<forms loginUrl="~/Account/Login" timeout="2880"/>-->
    <forms loginurl="~/Login/Login" timeout="20">
    </forms>
</authentication>

5.  Ahora con la entidad creada, se creará un nuevo directorio de nombre Repositorio (contendrá las clases de conexión a datos), y se implementara las clases de acceso a datos.
Dentro del directorio se implementa la clase Login y su interfaz

    5.1. Como les menciones al inicio, para esta caso utilizare Dapper para la manipulación de datos, para esto haré uso de NuGet.
Clic en el menú Herramientas, seleccionar Administrador de paquetes de biblioteca y clic en Administrar paquetes NuGet para la solución


Realizar la búsqueda y clic en Instalar

En nuestro caso solo contamos con un solo proyecto, pero si hubiera mas proyecto tendríamos que seleccionar el proyecto donde se desea instalar y clic en Aceptar

Si la instalación se realizo correcto indicará el aspa y clic en cerrar el administrador de NuGet.

    5.2. Ahora con todo la instalación del dapper iniciamos la implementación de nuestra clase Login.cs. Importamos las librerías necesarias como el using System.Configuration (para la referencia a nuestra cadena de conexión), using PRO_SEGURIDAD.Models (para la referencia a nuestro modelo login - creado en el punto 3) y por ultimo el using Dapper la que acabos de instalar y los métodos a crear son:

getIdUsuario: Invoca al procedimiento almacenado  SP_GET_IDUSUARIO, es decir es el encargado de captura el id del usuario.
getRolIdUsuario: Invoca al procedimiento almacenado SP_GET_DES_ROL_IDUSUARIO, es decir es el encargado de captura la descripción del rol al que pertenece el usuario.
public string getRolIdUsuario(string UserId)
{
 using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionBD"].ToString()))
   {
         var dpara = new DynamicParameters();
         dpara.Add("@PN_ID_USUARIO", UserId);
   return con.Query("SP_GET_DES_ROL_IDUSUARIO", dpara, nulltrue, 0, CommandType.StoredProcedure).SingleOrDefault();
    }
}

public string getIdUsuario(string UserName)
{
 using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionBD"].ToString()))
     {
          var dpara = new DynamicParameters();
          dpara.Add("@PV_USUARIO", UserName);
   return con.Query("SP_GET_IDUSUARIO", dpara, nulltrue, 0, CommandType.StoredProcedure).SingleOrDefault();
     }
}

5.3. Para concluir creamos la clase ILogin.cs. con los 2 métodos creados:


public interface ILoginData
{
    string getRolIdUsuario(string UserId);
    string getIdUsuario(string UserName);
}

Para concluir con esta fase, quiero dejar en claro que el modelo no solo es detallar una clase que contempla tu modelo entidad, es decir no solo es el valor del campo de la entidad a la cual se hace referencia; influye en tipo de implementación a acceso a datos que en realidad es el punto de partida para toda implementación sea MVC, Web Forms, Web Page o un Single Pages entro otros, en lo personal la mejor decisión es busca la herramienta o tecnología adecuada y plantear alternativas que mas se adecuan a la organización segun sus necesidades y visiones que tiene con la aplicación a implementar, así que no importar si uses un ORM o ADO.Net o que a uno le guste, es que en realidad lo que interesa es la correcta decisión a tomar en toda implementación.

Bueno, espero que les guste esta fase. Nos vemos en la siguiente fase.

Saludos.

Publicar un comentario

0 Comentarios