Vous êtes sur la page 1sur 19

sbado, 21 de febrero de 2015

Programacin en 3 capasValidacin Reglas de Datos


Hola a todos:
Este artculo es la continuacin de:
Programacin en 3 capas
En donde se habl de lo que es la arquitectura de desarrollo 3 capas, las ventajas de cada una de ellas y
la forma de crear un proyecto con esta arquitectura usando Visual Studio.
En este artculo les compartir la manera de como de una forma muy sencilla podemos nosotros validar
nuestras reglas de datos y personalizar los mensajes de informacin cuando una de ellas falle a fin de
informarle al usuario que campo es el que no est proporcionando correctamente, hablo de reglas como:

No nulos

No iguales

No vacos

Iguales

Menores que

Menores o igual que

Mayores que

Mayores o igual que

Formato de Email

Contenido de cadenas, Expresiones regulares

En fin, reglas como las anteriores que a simple vista podran verse sencillas, se complica en un proyecto
de 3 Capas, puesto que este trabajo debe de realizarlo la capa de lgica y no la capa de presentacin,
imagnese tener que hacer una validacin como las anteriores en un proyecto de una sola capa y tener
que devolver un tipo de mensaje por cada regla fallida, sin lugar a dudas esto le llevara bastantes lneas
de cdigo y un poco ms.
Antes de entrar de lleno en el tema de las validaciones recuerde que: El objetivo no es otro ms que el de
orientar a los Parvulos .Net sobre la arquitectura de software 3 capas y la validacin de las reglas de
Datos, todo lo escrito en este artculo no es ensayado y no es revisado por nadie ms, por lo cual podra
contener errores gramaticales y sintcticos, el articulo y sus conceptos no pretenden ser la verdad
absoluta del tema por lo tanto sintase con la confianza de dejar sus comentarios y opiniones en la
seccin de comentarios al final del mismo y si lo considera prudente enveme un correo electrnico por
medio del formulario de contacto con sus ideas y opiniones sobre el tema, y por ultimo si el articulo le es
de utilidad por favor considere dejar un comentario de agradecimiento, apoyar al mismo recomendando
los artculos y unirse como miembro del blog. Si se siente agradecido puede ver los anuncios que estn en
este artculo haciendo Click en ellos.
Requisitos: Visual Studio 2013, Framework 4.0, el proveedor de datos SqlCompact 4.0 instalado en su
equipo y muchas ganas de aprender.

Como siempre recomiendo encarecidamente que antes de descargar los proyectos de ejemplo (que les
pondr al final de articulo), traten de hacerlo ustedes mismos siguiendo paso a paso todo lo que se
mencionara aqu, si tienen dudas en uno en especfico no duden en contactarme.

Validacin de Reglas de negocio


Les mostrare como hacer uso de una librera que descubr ya hace algunos aos y que desde entonces no
dejo de utilizar, hablo de.
FluentValidation
FluentValidation es una librera en donde por medio de Expresiones Lambda podemos fcilmente
construir reglas de validacin poderossimas, con mucha facilidad y con una flexibilidad enorme,
FluentValidation puede servirnos tanto para proyecto del tipo WindowsForms (como ser nuestro caso)
como para aplicaciones Web usando ASP.NET o ASP con MVC, por lo cual si usamos una arquitectura 3
capas en un proyecto WindowsForms y el da de maana deseamos migrar nuestra capa de presentacin
a un proyecto web, no tendremos que preocuparnos por cambiar la manera de validar nuestras reglas de
Datos debido a la compatibilidad entre estos, no suena grandioso?, pues en la siguientes lneas les
mostrare como usar esta librera.
Bien, para comenzar:

Descargue el proyecto de ejemplo anterior en el lenguaje que usted ms domine

Localice la Capa de presentacin llamada Tienda-Presentacion

Agregue un formulario nuevo y llmelo FrmEmpleado

Agregue algunos campos al formulario FrmEmpleado a fin de logar un diseo como este:

Nombre los controles acordes a los campos que representan, recuerde que siempre es importante
seguir una convencin en cuanto a esto, anteponiendo al nombre una abreviatura del control, ejemplo,
el Label que tiene establecido Numero en su propiedad Text, podra llamarse lblNumero, el TextBox
que estar representando al Nmero podra llamarse txtNumero, etc.

Ahora, hagamos un pequeo cambio en el proyecto anterior, suponemos que usted descargo la Base
de datos SqlCompact llamado DataBase1.Sdf.

Click derecho sobre la capa de presentacin > Agregar > Elemento Existente:

Dirjase a la carpeta donde se encuentra nuestro archivo de base de datos SqlCompact llamado
DataBase1.Sdf, seleccinelo y presione Agregar.

Ubicados en nuestra capa de presentacin, haga Click derecho sobre DataBase1.Sdf > Seleccione
Propiedades del men emergente > Ubique la propiedad Copiar en el directorio de resultados > de las
opciones desplegadas seleccione No copiar

Recuerde: Que el seleccionar esta propiedad nos permite trabajar con una copia de nuestra base de datos
que el compilador automticamente coloca dentro de la carpeta Bin/Debug en tiempo de ejecucin, por lo
cual conservaremos integra la base de datos agregada en la capa de Presentacin, ya que los datos que
vayamos insertando se harn sobre esta copia.
Ya tenemos, correctamente configurada nuestra base de datos, ahora modifiquemos un poco nuestra
cadena de conexin ubicado en el archivo de configuraciones App.Config a fin de que este proyecto sea
capaz de leer el archivo de base de datos ubicado en bin/debug, nuestra cadena de conexin quedara de
la siguiente forma:

Cree la entidad EEmpleado, la cual contendr todas las propiedades necesarias para poder
manejar los datos de un Empleado, para ello dirjase al proyecto de entidades llamado TiendaEntidades > Click derecho > Agregar > Nuevo Elemento > Seleccione Clase > Nmbrela
EEmpleado > Click en el botn Agregar:

Abra la clase EEmpleado y dentro cree la siguiente estructura de cdigo:

Instalar FluentValidation en capa Lgica de Negocio


Para instalar FluentValidation en nuestra capa de Lgica de negocio tenemos dos opciones
1. Usar el paquete de Nuget para descargar en lnea la librera e instalarla en nuestro proyecto, para
esto:
Localice el proyecto de Lgica de Negocio > Click derecho > Administrar paquetes Nuget

Del panel izquierdo seleccione En lnea > en el panel izquierdo escriba FluentValidation >
Presione la tecla Enter > Del panel Central ubique FluentValidation > Click sobre el botn Instalar

Despus de instalado usted podr ver la referencia de la librera dentro de las referencias del proyecto:

2. La segunda opcin que tiene para instalar FluentValidation es mediante la creacin de la referencia
a la librera directamente desde las referencias del proyecto, para ello:
a. Descargue la librera desde esta direccin: FluentValidation
b. Ubique el proyecto Tienda-LogicaNegocio
c.

Reference Click derecho > Agregar referencia

En el panel izquierdo elija Examinar > presione el botn Examinar > dirjase a la ubicacin de
descarga > Seleccione la librera > click en Agregar > click en Aceptar > Despus usted
podr ver la referencia a la librera en la carpeta de referencias, tal cual como se muestra en la
pantalla relacionado a Nuget.

Clases Validator
Una vez instalado FluentValidation en nuestro proyecto, cree una carpeta dentro de la capa de lgica y
llmela RulesValidation, esta carpeta contendr todas nuestras clases necesarias para realizar las
validaciones de las distintas reglas de Datos, en esta ocasin solo crearemos una clase Validator ya que
solo tenemos la entidad Empleados para fines de ejemplificacin, pero en sus proyectos, usted tendr que
crear tantas clases Validator como entidades desee validar.

3. Posicionado en la carpeta RulesValidation, agregue una nueva clase y llmela EmpleadoValidator:

Nuestra clase EmpleadoValidator deber de tener una estructura de cdigo


como la siguiente (todas las explicaciones de cada regla estn en las siguientes
lneas de cdigo, si usted desea profundizar en el tema por favor visite la
documentacin de la librera en el link: Documentation o visite el foro de:
Discussions):

Agregue una nueva clase al proyecto y llmela CustomException, esta clase nos permitir
desde la capa de presentacin diferenciar cuando las excepciones son generadas por alguna
regla de Datos fallida y cuando son generadas por alguna excepcin no controlada en la
aplicacin (al menos en esta ocasin), ms adelante estoy seguro que usted podr explotar toda
la funcionalidad de esta clase.

Esta es la estructura de la clase:

Ya que tenemos nuestra clase Validator y nuestra CustomExpcetion, inserte una nueva clase de
lgica dentro del proyecto Tienda-LogicaNegocio y llamela EmpleadoBol:

Esta clase ser la que consuma nuestro EmpleadoValidator y ser el encargado de devolver a
presentacin las excepciones generadas desde el Validator.

Esta es la estructura de cdigo que deber de contener la clase EmpleadoBol:

Podr usted observar que en esta clase hacemos uso de una funcin llamada GetErrorMessages
perteneciente a otra clase llamada Validator, no muestro la estructura de esta clase en el artculo solo por
cuestiones de relevancia, pero usted podr hacer el respectivo anlisis descargando el proyecto de
ejemplo.

Capa de Presentacin, enviar la entidad y atrapar las excepciones


Ya que tenemos nuestras capas superiores perfectamente configuradas, ahora le toca a la capa de
Presentacin entrar en juego, dirjase a ella, seleccione el formulario FrmEmpleado y presione F7 para
dirigirse a la ventana de cdigo, la estructura de cdigo que deber de crear debe ser similar a esta:

Observe como nuestra manera de trabajar en la capa de presentacin no cambia en mucho, a excepcin
de la manera de atrapar nuestras excepciones, ah es donde aplicamos un pequeo cambio para poder
distinguir cuando es una excepcin por alguna regla de datos y cuando es por algo no controlado.

Ya que tenemos todo perfectamente ligado, procedamos a correr nuestra aplicacin para hacer nuestros
primeros anlisis.
1.Primero haremos Click en el botn Aceptar sin introducir un solo registro:

* Observe como los primeros dos mensajes (encerrado en verde) corresponden a la validacin de nuestra
regla para la propiedad Nombre y que nos devuelve los mensajes que definimos.
* Observe como las validaciones para la propiedad ApellidoMaterno (encerrado en rojo), devuelven
mensajes propios para las validaciones que definimos, sin que hayamos especificado mensajes
personalizados

* Observe el mensaje para las propiedades Sexo y Estado Civil (encerrado en azul), ponga atencin en
como uno se diferencia del otro en funcin de si definimos o no un mensaje personalizado.
* Una situacin similar ocurre con los telfonos.

2. Ahora llene parcialmente los campos:

* Observe que en las reglas ya no muestra el mensaje para Nombre del empleado y Sexo.
* Observe como el mensaje para el Apellido Paterno cambio.
* Observe como a pesar de seleccionar una fecha para el campo Fecha nacimiento, este sigue generando
excepciones, Por qu?, porque a pesar de que seleccionamos una fecha esta no es vlida debido a que
es superior a la fecha actual del sistema (21/02/2015) y una fecha de Nacimiento no puede ser mayor al
actual (al menos no para un Empleado).
* Observe como a pesar de que introdujimos un valor para el campo Telfono, seguimos obteniendo un
mensaje debido a que no cumple con un formato valido.

3. Ahora llenemos todos nuestros campos segn definimos nuestras reglas de validacin:

* Observe como nuestro mensaje de validacin, ttulo del mensaje y el icono cambiaron, por qu?,
porque esta excepcin ya no fue generada por una regla de datos fallida, sino porque el mtodo
encargado de guardar la entidad an no est implementado, si ustedes navegan hacia la clase
EmpleadosDal vern la siguiente estructura de cdigo:

Observe como el mtodo Guardar, solicitado por EmpleadoBol cuando se cumplen todas las reglas de
validacin, realmente no est implementado y en su lugar se genera una excepcin, esta parte no la
implemente para que usted pudiera observar las diferencias entre una excepcin generada por una regla
de negocio y una excepcin generada por cdigo no controlado, pero, estoy seguro que como usted ya
ley el articulo previo a este no le ser difcil implementar las lneas de cdigo necesarias para hacer que
este mtodo funcione.
Aqu termina nuestro artculo sobre Arquitectura 3 Capas- Validacin de reglas de datos, espero haya sido
de su agrado y que la explicacin haya sido lo bastante clara como para que en sus prximos desarrollos
usted sea capaz de usar FluentValidation sin ningn problema, en caso de que tenga alguna duda por
favor deje su pregunta en la seccin de comentarios o escrbame por medio del formulario de contacto.
Escribir este artculo me llevo ms de 4 horas, dejar un comentario de agradecimiento le tomara 5 minutos,
usted podra apoyar al foro viendo la publicidad que en l se muestra.
Saludos desde Monterrey, Nuevo Len Mxico!
Publicado por Jos Luis Garca Bautista en 22:46