El framework URF - Unit of
Work & (extensible/generic) Repositories Framework fue añadido
al proyecto WEB API para implementar de una forma organizada la implementación de 2 patrones:
-
Patrón Unit Of Work, añade al proyecto 2 funcionalidades importantes:
-
Aisla la aplicación de los cambios en el almacén de datos manteniendo una lista de objetos en memoria que
han sido modificados (insertados, actualizados o borrados) en una solo transacción.
- Una vez que se lleva a cabo la transacción, los cambios en BBDD se realizan como una única unidad de trabajo.
-
Patrón Repositorio, añade al proyecto 2 funcionalidades importantes:
-
Una capa entre la lógica de negocio y la capa de datos.
-
Permite desacoplar y testear el acceso a datos.
Para su instalación se descargó dicho framework añadiendo el proyecto Repository.csproj al proyecto.
Los servicios creados para cada una de las entidades se desacoplaron por constructor:
-
Implementando las interfaces IRespositoryAsyncCCC<X> donde CCC era el Contexto utilizado y X el
modelo asociado en éste.
-
Añadiendo Unity bootstrapper for ASP.NET Web API y registrando en App_Start/UnityConfig los 2 UnitOfWork asociados con
los 2 Contextos así como el registro de los tipos de entidades de servicio. (En dicho registro se añadieron también las
intercepciones de Unity pertinentes).
Con ello conseguimos utilizar los métodos básicos del Repositorio genérico: GetAsync(), SetAsync(), Insert(), Update(), Delete(), etc.
Pero como las entidades hacían operaciones más complejas que CRUD se añadieron clases estáticas con métodos de extensión
sobre
IRepository<E> llamadas
ERepository (donde E es cada Modelo del Contexto). Dichos métodos "agregados" podían ser ahora
llamados en los métodos del servicio que los necesitasen.
El resutado es tal que los controladores pueden llamar a los métodos de servicios requeridos y generar una
"Unidad de trabajo" para llevar a cabo todas las modificaciones sobre las Entidades.
Un excelente video para ver como se añade URF - Unit of Work & (extensible/generic) Repositories Framework a un proyecto
desde cero se puede ver aquí