Ir al contenido principal

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.

Comentarios

Entradas más populares de este blog

Habilitar Usuario HR Oracle

Al realizar la primera instalación del Oracle, el usuario HR por defecto está bloqueado y por ende no podemos loguearnos como dicho usuario, lo que debe hacer son los siguiente pasos, aplicables para Linux o Windows.
1. Conectarse como usuario system o sysdba + contraseña haciendo uso del comando connect.
Usuario: system
Password: xxxx 


2. Hacer uso  del comando alter user hr account unlock desbloqueamos la cuenta.
alter user hr account unlock;

3. Escribimos el comando alter user HR identified by hr; con esto estamos diciendo que la contraseña será hr.

alter user HR identified by hr;

4. Ahora testeamos la conexión con el comando - conn hr/hr@xe. Si deseas después de conectarnos se puede realizar un select a la tabla employees del hr.


Resultado del select realizado
5. Con todos estos pasos realizados ya podemos logearnos desde cualquier IDE como el usuario hr  y la contraseña hr que definimos en el paso 3. 
Para finalizar nos loguearemos con el IDE Oracle SQL Developer.

Espero les sea de utilidad,…

Usuario SYS y SYSTEM - ORACLE

Usuario SYS y SYSTEM
Ambos usuario son creados de forma automática al crear la base de datos ORACLE y se otorga el rol de DBA.

SYS (password por defecto: CHANGE_ON_INSTALL).
SYSTEM (password por defecto: MANAGER).

Lo que se recomienda es cambiar el password de ambos usuarios por el tema de seguridad.

SYS:
Todas las tablas y vistas para el diccionario de datos de la base de datos están almacenados en el esquema SYS. Estas tablas y vistas son críticas para el funcionamiento de la base de datos ORACLE. Para mantener la integridad del diccionario de datos, las tablas del esquema SYS son manipulados solo por la base de datos. Nunca se debería modificar algo o crear tablas en el esquema del usuario SYS.

SYSTEM:
El usuario SYSTEM se utiliza para crear tablas y vistas adicionales que muestran información administrativa, tablas internas y vistas utilizado por varias opciones y herramientas de la base de datos ORACLE. No se recomienda utilizar el esquema SYSTEM para almacenar tablas de interés para usu…

Parámetro de entrada y salida – PL/SQL

Parámetro de entrada y salida – PL/SQL:
Los parámetros de entrada y salida no son los parámetros de inicialización de la base de datos ORACLE. Los parámetros de entra y salida son utilizados mayormente en implementaciones de funciones, procedimientos almacenados o bloques de código bajo el lenguaje del PL/SQL, se considera que ambos parámetros (entra y salida) puedan realizar operaciones en el mismo bloque PL/SQL, es decir, si enviamos un parámetro de entrada hará que cumpla cierta operación y retornara los valores de salida de dicha operación procesada de acuerdo al parámetro de ingresado. Es de acuerdo al caso que nos presenta en la implementación.
Algo importante al definir los parámetros, es saber y considerar cuántos tipos de parámetro existe si solo hablamos de entrada y salida, en realidad mi determinación seria 3 tipos:

Parámetros:

IN – entrada
OUT – salida
IN OUT – entrada salida

Parámetro IN – entrada:
El comportamiento común de estés tipos de parámetros es estar siempre pendiente d…