Busqueda local

Loading

sábado, 15 de enero de 2011

Contexto

Que necesito para acceder al Model?

Desde el punto de vista de MVC el model se encuantra en el contexto del usuario que este ejecutando la aplicación. Por lo que acceder a él debe ser bajo algún mecanismo que nos permita garantizar que dicho contexto sea el mismo sin importar desde que repositorio estemos realizando el acceso.
Esto se debe a necesidad de asegurarnos que las transacciones automáticas que nos ofrece el Entity framework mantengan su integridad.

 

Patrón de unidad de trabajo

Usando este patrón evitamos poner en una unidad de trabajo separada cada acceso al Model. Al usarlo garantizamos que que la unidad de trabajo se encuentra dentro del mismo contexto. En el ambiente Web se trata de cada REQUEST. De esta manera si durante el REQUEST las acciones sobre el Model Fallaran o tuvieran éxito, al modificar más de una entidad, la transacción quedaría garantizada.

 

Como debemos implementarlo?

Manteniendo nuestro modelo de codificación, lo primero es crear una interface genérica. Ya que la usaremos para almacenar diferentes tipos de entidades en el contexto del REQUEST. Este código debe estar en la carpeta de Interfaces.
idatacontext
Luego debemos crear una clase que servirá como único medio de acceder a dicho contexto. Esta clase debe implementar la interface que creamos.
datacontext
Como podemos observar en el código, los métodos que empleamos acceden al HTTPCONTEXT, y después acceden a la sesión actual. Donde obtenemos acceso a la colección de los elementos que tengamos en ella.
Es interesante notar la forma en que se usa el generics, para determinar el tipo de objeto.

 

Como lo usaremos?

Primero que nada debo aclarar qué no es necesario usar este patrón, para acceder al Model, pero si no lo empleamos, y nuestra aplicación necesitara usar transacciones, podríamos tener algunos problemas.
declracionunidad
Como pueden ver en el código hay dos declaraciones, la primera es la típica para acceder desde el repositorio al Model. La segunda es implementando nuestro código del patrón de unidad de trabajo.
Para nuestro ejemplo no es necesario escribir la primera declaración, solo la segunda.
Una vez que hayamos realizado esta declaración, podremos acceder al Model, de una forma segura.
getallcontext
Este código es el mismo que usamos para el ejemplo de LINQ, pero en este caso accedemos a nuestras entidades por medio de la clase que controla el contexto.
Suerte

No hay comentarios:

Publicar un comentario