Dường như mỗi ví dụ tôi tìm thấy mẫu kho lưu trữ, việc triển khai thực hiện khác nhau theo một cách nào đó. Sau đây là hai ví dụ tôi chủ yếu tìm thấy.Thực hiện mẫu lưu trữ
interface IProductRepository
{
IQueryable<Product> FindAll();
}
sau đó Thường có một lớp mà nói chuyện với các kho lưu trữ và gọi phương thức FindAll() và thực hiện bất kỳ thao tác như tìm kiếm các sản phẩm bắt đầu bằng chữ 's' hoặc sản phẩm lấy trong một thể loại cụ thể.
Ví dụ khác mà tôi tìm thấy rất nhiều đặt tất cả các phương pháp tìm vào kho
interface IProductRepository
{
IEnumerable<Product> GetProductsInCategory(int categoryId);
IEnumerable<Product> GetProductsStartingWith(string letter);
IEnumerable<PromoCode> GetProductPromoCodes(int productId);
}
con đường nào bạn khuyên tôi đi? Hoặc những ưu điểm/nhược điểm của nhau là gì?
Từ hiểu biết của tôi khi đọc http://martinfowler.com/eaaCatalog/repository.html cách tiếp cận đầu tiên dường như phản ánh tốt nhất điều này?
Cảm ơn bạn đã trả lời. Tôi nghĩ bạn đã có nghĩa là để nhóm bởi aggregates? Tôi có nên có một kho lưu trữ cho mỗi thực thể? Đây cũng là ví dụ về ví dụ đầu tiên mà tôi cung cấp.http: // stackoverflow.com/questions/5049363/sự khác biệt giữa kho-và-dịch vụ-lớp – Scott
Mỗi tổng hợp. Tôi không thể nói rằng mã khuyến mại chỉ dành cho các sản phẩm. (kể từ khi nó được đặt tên là 'GetProductPromos' và không chỉ là' GetPromos') – jgauffin
không có giao diện đầu tiên của bạn, cũng có 2 lý do để thay đổi? đầu tiên: thay đổi phương thức FindForCategory để thay đổi sản phẩm trả về mặc định nếu nó không tìm thấy bất kỳ sản phẩm nào bằng cách vượt qua categoryId, và thứ hai thay đổi FindAllStartingWith để áp dụng một số bộ lọc mặc định? – Masoud