Con el paso de los años dentro de este medio, he visto muchas formas de hacer lo mismo, y siempre he tratado de usar la más recomendada o probada. Hace algún tiempo, escuche por primera vez la palabra PATRON al referirse a una forma probada de hacer las cosas.
La curiosidad que se despertó en mí, me ha motivado a investigar la mejor forma de escribir el código, antes de hacerlo. Tal es el caso de usar el Entity Framework (EF), dentro del patrón MVC.
Expongamos el escenario:
En el MVC se tiene un controler que debe encargarse de atender las solicitudes de los clientes y un Model que debe encargarse de los datos, por decirlo de alguna manera, aun que es más complejo. En fin, el objetivo es lograr que entre el Controler y el Model haya completa independencia, o ignorancia del mecanismo de persistencia. Esta abstracción se puede lograr usando el Patrón de repositorio.
Como se implementa:
Para usar este patrón debemos empezar por crear una interface:
Una vez que tenemos la interface podemos implementarla en una clase, para codificar sus métodos:
Esta implementación resulta ser muy ingenua ya que como vemos en la primera línea estaría manteniendo una instancia del contexto dentro del repositorio.
Qué problema representa ser tan ingenuo?
Para fines didácticos, podemos encontrar en internet muchos ejemplos que se implementan de esta manera, sin que hagan ninguna alusión a la situación del contexto. Sin embargo, en la vida real, si creamos nuestro repositorio de esta forma, y mantenemos una instancia del contexto dentro del repositorio, entonces tendríamos un grave problema cuando tratemos de guardar en una transacción a nivel del controler, datos que agregamos al contexto por medio del Repositorio de cada entidad. Ya que cada repositorio tendría una instancia diferente del Contexto.
La mejor forma de hacerlo es usando algún mecanismo que nos garantice que nuestro contexto es el mismo, para todos nuestros repositorios. Para esto podemos implementar el Patrón de Unidad de trabajo.
Ok, como se implementa?
Al igual que el anterior se parte de una interface:
La implementamos:
Muy bien, a partir de este momento podemos implementar nuestro Repositorio de la forma correcta:
El poder del código solo es completo, si tenemos el conocimiento de como usarlo
Hola! La verdad que este tema es más que interesante, pero me surge una duda, cuándo llamarías a "DisposeCurrent"? Podrías subir un ejemplo?
ResponderEliminarGracias!
Hola Lau disculpa la tardanza pero he estado muy ocupado en un proyecto. Hoy mismo voy a subir un ejemplo del DisposeCurrent. Suerte
ResponderEliminar