Repository Pattern vs DAL Object Creation

7

Por lo que he aprendido, el IRepository debería contener CRUD . Luego heredamos este IRepository en nuestras otras Interfaces como IProduct e implementamos IProduct concrete class ProductRepository , con métodos como GetAllProducts() , Top5Products() .

También podríamos hacer lo mismo con la arquitectura de n niveles. me gusta, Creando DAL Class Library y en ella definen una clase Product con métodos como GetAllProducts() , Top5Products() .

En las clases DAL.Product y Repo.ProductRepository inicializamos DB Context de Entity Framework y consultamos nuestros datos relevantes.

La llamada es similar en los métodos Repo.ProductRepository o DAL.Product de BLL

En vista de estas similitudes, mi pregunta ¿cuál es el beneficio de Repos? Puedo hacer lo mismo con mucha facilidad utilizando arquitecturas de n niveles con ( Controller , BLL Class Library , DAL Class Library ).

    
pregunta M. Arslan 13.09.2018 - 08:29

3 respuestas

4

Mi entendimiento es:

  • DAL (Capa de acceso a datos) se refiere a una capa en su software que se encuentra entre su tecnología de persistencia y la lógica de su aplicación. Su propósito es mantener las inquietudes de acceso a los datos por separado del resto de las inquietudes de su aplicación. Es un concepto general .

  • Repository es un concepto de DDD (Domain Driven Design).

En DDD, un Repositorio es responsable de encapsular todos los problemas de acceso a los datos para un Agregado determinado. Esto viene con la responsabilidad de garantizar la coherencia durante las lecturas y escrituras del Agregado. Y un Agregado es una agrupación de Entidades relacionadas (por ejemplo, Product , Store , etc.).

Por lo tanto, un Repositorio es específicamente consciente de su preocupación de persistencia y consistencia del Agregado. Su general DAL probablemente estará compuesto de específicos Repositorios

TL; DR;

  • DAL es un término general para abstraer las preocupaciones de acceso a datos.
  • Repositorio es un concepto similar, pero más específico, de DDD.
  • Es probable que su DAL esté compuesto por varios Repositorios.
respondido por el MetaFight 13.09.2018 - 12:46
1

Estás comparando dos conceptos diferentes y complementarios:

  • La Data Access Layer es una Capa arquitectónica que pretende abstraer el acceso a los datos. No dice cómo se abstraerá el acceso.
  • El Repository es un patrón específico que pertenece al DAL (consulte la lista de patrones al final de este enlace ). Dice exactamente cómo abstraer un acceso específico a los datos: al ofrecer una colección como una interfaz al almacén de datos.

El DAL en tu ejemplo

Curiosamente, en su ejemplo de biblioteca de clases, DAL.Product parece ser un repositorio. Entonces, es normal que realmente no veas una diferencia: desde el punto de vista de la implementación es lo mismo (en este caso específico).
Pero no tiene que hacerlo; Un DAL podría implementarse de manera diferente, por ejemplo:

  • registros activos que se basan en una capa de abstracción de base de datos.
  • objetos de dominio anémico (¡atención, anti-patrón!) obtenidos de un row gateway de datos
  • o, por qué no, objetos de dominio obtenidos de diferentes objetos de consulta, donde cada consulta implementaría una forma particular de recuperar el objeto
  • repositorios
  • una mezcla de todos esos

Lo que es diferente para el repositorio

El concepto de repositorio es independiente del modelo arquitectónico y la implementación. No es necesario pensar en capas o bases de datos. Todo lo que necesita saber cuando diseña su dominio es que sus objetos están en repositorios que son un tipo especial de colección que ofrece persistencia. Esto los hace muy adecuados para el diseño de dominios y explica por qué son un elemento clave del Domain Driven Design .

En DDD, los repositorios tienen algunas reglas más que respetar: dan acceso a agregados (una entidad independiente o un grupo de entidades relacionadas que dependen de una raíz agregada) y hay un repositorio único por agregado.

    
respondido por el Christophe 13.09.2018 - 23:19
0

El patrón de repositorio es una forma más sofisticada de la DAL.

Si lee sobre Inversión de control (IoC), inyección de dependencia (DI) y pruebas de unidad, quedará claro.

    
respondido por el Marius 14.09.2018 - 21:57

Lea otras preguntas en las etiquetas