Все, что я пытаюсь найти правильное определение шаблона хранилища.
Мое первоначальное понимание было таким (чрезвычайно тупым)
- Отделите ваши бизнес-объекты от ваших объектов данных
- Стандартизировать методы доступа на уровне доступа к данным.
Я действительно видел 2 разных реализации, и в Интернете нет формальных примеров, те, которые я видел, спрятаны в книгах.
Реализация 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();
}
Реализация 2:
public interface IProductRepository {
List<Product> GetAllProducts();
void CreateProduct(Product p);
void UpdateProduct(Product p);
List<Product> GetProductsByCustomerID();
}
Обратите внимание, что первый - это общий Get / Update / GetAll и т. Д., Второй - больше того, что я определил бы как "DAO".
Оба разделяют извлечение из ваших сущностей данных. Что мне нравится, но я могу сделать то же самое с простым DAO. Тем не менее, вторая часть стандартизирует операции доступа, в которых я вижу ценность, если вы внедрите этот корпоративный подход, люди легко узнают набор методов доступа для вашего хранилища.
Не ошибаюсь ли я, что стандартизация доступа к данным является неотъемлемой частью этой модели? Если оба они верны, почему бы выбрать вариант 2?
Rhino имеет хорошую статью о реализации 1, и, конечно, MS имеет расплывчатое определение , а пример реализации 2 - здесь .