2009-04-24 16 views
9

Si crea una clase de repositorio que encapsula toda su lógica de persistencia para una entidad determinada, como PersonRepository, pero su clase de repositorio no implementa el patrón Unidad de trabajo o el patrón de Mapa de identidad, ¿todavía se considera un repositorio? En otras palabras, ¿se requiere la Unidad de trabajo y el Mapa de identidad para la implementación de un repositorio, o podemos simplemente llamar a cualquier clase que encapsula nuestra lógica de persistencia como un repositorio?¿Sigue siendo un repositorio un repositorio sin unidad de trabajo?

Debo añadir una cosa. Si un repositorio no requiere estos patrones y en realidad es solo un contenedor para los métodos de persistencia, ¿cuál es la diferencia entre un repositorio y un DAO (Objeto de acceso a datos)? ¿Estamos simplemente creando múltiples nombres para el mismo objeto o nos falta parte de lo que se supone que es un repositorio?

Respuesta

3

Sí, todavía es un repositorio.

En cuanto a si Repository == DAO, creo que Repository debe estar en la capa de lógica de negocios y DAO debe estar en la capa de acceso a datos, es decir, creo que están en capas diferentes. Entonces, según tengo entendido, el Repositorio llama a los métodos DAO para cargar y conservar datos.

3

Diría que los patrones de Repositorio y Unidad de trabajo son ortogonales.

Con mucha frecuencia, quiero que una sola unidad de trabajo abarque operaciones en varios repositorios, por lo que una implementación de eso pertenecería a una capa superior.

1

Sobre la base de lo que dijo Sii - me parece mejor si el repositorio y la unidad de trabajo no están relacionados. Separación de preocupaciones?

1

Al considerar la separación de preocupaciones, recuerde que su Repositorio tendrá los métodos de implementación de almacenamiento de datos, lo que le permite mantenerlo fuera de su código principal. Esto es útil para pruebas unitarias así como para eventualmente intercambiar su implementación de almacenamiento de datos (un ejemplo de implementación de almacenamiento de datos sería LINQ-to-SQL en ASP.NET.)

Cuestiones relacionadas