2010-09-18 23 views
7

Xây dựng một ứng dụng, trước khi sử dụng một cơ sở dữ liệu thực, chỉ để có được công việc, trước tiên tôi có thể sử dụng danh sách mã hóa cứng làm kho chứa giả, trong bộ nhớ:Thêm các mục mới một cách động vào kho chứa giả được mã hóa bằng IQueryable

public class FakeProductsRepository 
{ 
    private static IQueryable<Product> fakeProducts = new List<Product> { 
     new Product{ ProductID = "xxx", Description = "xxx", Price = 1000}, 
     new Product{ ProductID = "yyy", Description = "xxx", Price = 2000}, 
     new Product{ ProductID = "zzz", Description = "xxx", Price = 3000} 
    }.AsQueryable(); 

    public IQueryable<Product> Products 
    { 
     get { return fakeProducts; } 
    } 
} 

Cách thêm phương thức vào lớp này để thêm các mục mới, không được mã hóa cứng trong danh sách này theo kiểu động?

Trả lời

13

Chỉ cần giữ Danh mục sản phẩm < > trong một lĩnh vực của loại List < sản phẩm > thay vì IQueryable < sản phẩm >:

public class FakeProductsRepository 
{ 
    private readonly List<Product> fakeProducts = new List<Product> 
    { 
     new Product { ProductID = "xxx", Description = "xxx", Price = 1000 }, 
     new Product { ProductID = "yyy", Description = "xxx", Price = 2000 }, 
     new Product { ProductID = "zzz", Description = "xxx", Price = 3000 }, 
    }; 

    public void AddProduct(string productID, string description, int price) 
    { 
     fakeProducts.Add(new Product 
     { 
      ProductID = productID, 
      Description = description, 
      Price = price, 
     }); 
    } 

    public IQueryable<Product> Products 
    { 
     get { return fakeProducts.AsQueryable(); } 
    } 
} 
+0

Cảm ơn! Và cách xây dựng phương thức ** AddProduct ** để nó chứa tham số không phải đối tượng ** Sản phẩm **, nhưng các biến: ** ProductID **, ** Description ** và ** Price **? – rem

+0

Sử dụng "' Sản phẩm mới' "bên trong' Thêm sản phẩm'. –

5

Nếu bạn đang đi để Mock kho của bạn cho mục đích thử nghiệm sau đó tôi muốn đề nghị bạn bắt đầu bằng cách khai báo một giao diện bao gồm các hàm mà bạn mong đợi từ kho lưu trữ của mình. Sau đó, xây dựng kho lưu trữ giả và thực của bạn để triển khai giao diện đó, nếu không bạn sẽ không thể dễ dàng thay thế cho giao diện kia.

Bạn sẽ tìm thấy nó khá dễ dàng khi bạn có giao diện phù hợp, các chức năng sẽ đã được khai báo, ví dụ:

public interface IRepository { 
    IQueryable<Products> GetAllProducts(); 
    Product AddProduct(Product Product); 
} 

public class FakeRepository : IRepository { 
    private static IList<Product> fakeProducts = new List<Product> { 
     new Product{ ProductID = "xxx", Description = "xxx", Price = 1000}, 
     new Product{ ProductID = "yyy", Description = "xxx", Price = 2000}, 
        new Product{ ProductID = "zzz", Description = "xxx", Price = 3000} 
    }; 

    public IQueryable<Product> GetAllProducts() { 
     return fakeProducts.AsQueryable(); 
    } 

    public Product Add(Product Product) { 
     fakeProducts.Add(Product); 
     return Product; 
    } 
} 
+0

giao diện tuyệt vời – bkwdesign

Các vấn đề liên quan