2011-02-03 74 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