2011-02-03 105 views
2

我需要C#中有關設計問題(存儲庫設計模式)的幫助。我有一個包含幾種「產品」的系統。每個產品都有「搜索」功能。我想設計一個可重用/通用的搜索界面。根據搜索的產品,搜索標準將與返回的數據不同。存儲庫模式問題和泛型?

搜索功能只會搜索特定的產品類型。目前搜索是唯一的功能,但在將來可能會有其他功能,如「GetByID」,也會根據類型表現不同。

我最初的想法是創建一個「產品」接口「DoSearch:功能

public interface IProduct 
{ 
    [return type?] DoSearch([paramters?]); 
    ... 
} 

public class Product1 : IProduct 
{ 
    [product1 result] DoSearch([parameters?]) 
    { 
      //Do searching logic 
     return [product1 result] 
    } 
} 

那麼我將有一個‘商’級

public class ProductBusiness 
{ 
    IProduct _product; 

    public ProductBusiness(IProduct product) 
    { 
     _product = product 
    } 


    public [return type?] DoSearch([parameters]) 
    { 
     return _product.DoSearch([paramters]); 
    } 
} 

我的問題是,如何做使業務類別中的[參數]和[返回類型]爲「通用」,因爲根據產品類型,參數和返回類型會有所不同?

客戶端代碼我們這將看起來像這樣:

ProductBusiness productBusiness = new ProductBusiness(new Product1()); 
[product1 result] = productBusiness.DoSearch[parameters]); 

...process result code 

回答

5

我會實現這樣的東西。它足夠通用,代碼的最大部分可以在存儲庫的基類中實現。

public interface IRepository<T> where T: IProduct 
{ 
    IEnumerable<T> Search(Predicate<T> query) 
    IEnumerable<T> Search(IEnumerable<Predicate<T>> query> 

} 
+0

如果您可以添加一個示例,說明調用存儲庫的樣子會是什麼樣子,只是爲了完成示例... – Fenton 2011-02-28 14:49:16