Todo lo que estoy tratando de encontrar es la definición correcta del patrón de repositorio.Patrón de repositorio Estandarización de métodos
Mi entendimiento original fue esto (muy dumbed abajo)
- separar sus objetos comerciales de sus Datos Objetos
- estandarizar los métodos de acceso en la capa de acceso de datos.
Realmente he visto 2 implementaciones diferentes, y no hay ejemplos formales en línea, los que he visto están escondidos en los libros.
Implementación 1:
public Interface IRepository<T>{
List<T> GetAll();
void Create(T p);
void Update(T p);
}
public interface IProductRepository: IRepository<Product> {
//Extension methods if needed
List<Product> GetProductsByCustomerID();
}
Aplicación 2:
public interface IProductRepository {
List<Product> GetAllProducts();
void CreateProduct(Product p);
void UpdateProduct(Product p);
List<Product> GetProductsByCustomerID();
}
Aviso la primera es genérico Obtener/Actualización/GetAll, etc, el segundo es más de lo Definiría "DAO" como.
Ambos comparten una extracción de sus entidades de datos. Lo cual me gusta, pero puedo hacer lo mismo con un simple DAO. Sin embargo, la segunda pieza estandariza las operaciones de acceso en las que veo valor, si implementa esta empresa, las personas fácilmente conocerían el conjunto de métodos de acceso para su repositorio.
¿Me equivoco al asumir que la estandarización del acceso a los datos es una pieza integral de este patrón? Si ambos son correctos, ¿por qué elegir uno hacer la implementación 2?
Rhino tiene un buen artículo sobre la implementación 1, y por supuesto MS tiene un vago definition y un ejemplo de implementación 2 es here.
Para mí, una _interfaz_ es una abstracción, es decir, lo opuesto a _implementation_. ¿Estamos discutiendo solo las interfaces aquí, o más bien las clases de implementación? – MEMark