Все, что я пытаюсь найти правильное определение шаблона репозитория.
Мое первоначальное понимание было таким (крайне ошарашенным)
- Отделите свои бизнес-объекты от своих объектов данных.
- Стандартизировать методы доступа на уровне доступа к данным.
Я действительно видел 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 - здесь.