Resistencia - Jornada de Actualización Profesional MS 2008
-
Ver Datos del Eventos
-
Suscribirse aquà (es un evento gratuito)
Los espero ahÃ
Los espero ahÃ
Aquà está la prometida documentación de NHibernate Validator 1.0.0 Alpha1. Se puede descargar aquà en diferentes formatos: html, pdf y la API en formato chm.
Los últimos desafÃos que estoy experimentando son en Visual Basic. Como bien saben no soy programador de VB nativo pero gracias a unos helpers funciono
Este challenge viene de la mano de:
Este es el framework (por ahora la foto):
La idea es básicamente contar con una aplicación que pueda denegar a servicios (por abajo de la UI) a usuarios con roles por debajo de los requeridos. Por ejemplo vamos a ver a este servicio, que tiene un mensaje Save:

Como pueden ver el atributo encima del método indica el nivel de autorización que se necesita para acceder al método, serÃa el Rol. En resumidas cuentas esto nos dice es que si un usuario necesita invocar este método en cualquier implementación de este servicio, él mismo debe cumplir tener ese Rol dentro de la Aplicación, esto es, antes debÃa haberse autenticado.
Ahora, cómo hacemos la intercepción antes que se ejecute el método? Usando un container que permita tales capacidades, en este caso con ayuda total de Windsor Container. 
1) Se solicita un container, en este caso el container se lo extrae del HttpContext.
2) Solicitamos al container una implementación de IUserService, él nos devuelve una instancia envuelta en un proxy. Debemos recordar que los servicios son agnósticos de la capa de presentación (ya sea Winforms or Asp.Net)
3) Cuando ejecutamos Save, se ejecuta primeramente una validación por parte del Framework de Seguridad para ver si el usuario “llamador” cumple con el rol correspondiente. Sino lo hace se lanza una excepción y el método no es invocado. También tenemos intercepción después de terminada la ejecución real del método, si bien decidimos no hacer nada, el framework de seguridad nos permite extender muy fácilmente (implementando 1 clase).
El Framework posee una clase para para la validación previa a la ejecución de los métodos: AspNetInterceptor y esta es la implementación:
TodavÃa no libero el código, pero en poco tiempo pienso hacerlo como es costumbre
Me gusta ver código que se lea a simple vista, este es un claro ejemplo de ello:
Muchos critican a VB pero tiene su encanto a la hora de definir este tipo de lógica
Hace tiempo ya este blog viene sacando a la luz post acerca de NHibernate. Se los recomiendo, posee HowTo’s muy explicativos.
Como dijo Sid (de la Era de Hielo): “Ay mamá perezosa!”
Por favor, quién le dijo que diga eso la pobre chica?
Fuente: John Papa blog
Para quien no están familiarizado con NHibernate Validator: es un buen framework para validar objetos en cualquier parte de nuestra aplicación.
Ahora, como podemos integrar esta herramienta para poder validar nuestros objetos antes de almacenar un objeto en Db4o? La respuesta es fácil.
Recordemos que NHibernate Validator puede configurarse para validar usando .Net Attributes o archivos Xml. En este caso veremos como hacerlo usando la primer aproximación. La clase Customer deberÃa lucir asÃ:

Ahora para hacer la integración, llamaremos a un helper que haga el trabajo por nosotros. Nuestro código lucirÃa asÃ:

Como puedes ver, con una simple clase ayudante podemos configurar la integración con una lÃnea de código, algo muy fácil. En esta lÃnea el método Initialize registra los eventos en Db4o.
Ahora, vayamos a ver la Validación en Acción. El código de abajo muestra a la aplicación intentando guardar una instancia inválida de un objeto:

Entonces cuando un Save/Update está a punto de ocurrir, primero que nada, NHibernate Validator chequeará si la entidad se encuentra dentro un estado válido, sino lo está, una InvalidStateException será lanzada, entonces Db4o encapsula esta excepción con una excepción EventException, que luego deberemos atrapar y desencapsular para recuperar la primera excepción, y de esta manera obtenemos los valores inválidos que de la entidad. SerÃa bueno que Db4o no encapsule la excepción pero por varios motivos esto no puede ser asÃ, esto fue discutido en el foro de Desarrollo de Db4o aquÃ.
Entonces, fue fácil integrar NHV con Db4o. No ?
Este release lo estaba esperando desde hace mucho tiempo por parte de Db4o, y los que siguen a Db4o de cerca creo que también.
Para los que no están familiarizados, Db4o corre sus aplicaciones en ambas plataformas: Java y .Net. El mayor trabajo se realiza en Java, que luego mediante Sharpen se realiza la conversión hacia C#, si bien no el 100% de Db4o.Net está generado, la mayorÃa lo está.
Espero que sirva !
Andrés Vettori me deja un comentario aquÃ, contando que Retina.Net está nuevamente en actividad.
Para los que no saben, Retina.Net es un framework de persistencia de objetos nacido aquà en Argentina, cuyo project leader es el mismo Andrés.
Pasen y vean en Codeplex: http://www.codeplex.com/retina
Al parecer hay muchos planes sobre Retina: Linq, Designer, Generics, etc. Sin dudas hay que darle una mirada
Gracias Andrés.