C# 存储库模式问题和泛型?

C# 存储库模式问题和泛型?,c#,generics,design-patterns,C#,Generics,Design Patterns,我需要C语言中的设计问题库设计模式的帮助。我有一个包含多种产品类型的系统。每个产品都有一个搜索功能。我想设计一个可重用/通用的搜索界面。根据要搜索的产品,搜索条件以及返回的数据将有所不同 搜索功能仅在特定产品类型内搜索。目前搜索是唯一的函数,但将来可能会有其他函数,如GetByID,它们的行为也会因类型而异 我最初的想法是创建一个带有DoSearch:function的产品界面 public interface IProduct { [return type?] DoSearch([par

我需要C语言中的设计问题库设计模式的帮助。我有一个包含多种产品类型的系统。每个产品都有一个搜索功能。我想设计一个可重用/通用的搜索界面。根据要搜索的产品,搜索条件以及返回的数据将有所不同

搜索功能仅在特定产品类型内搜索。目前搜索是唯一的函数,但将来可能会有其他函数,如GetByID,它们的行为也会因类型而异

我最初的想法是创建一个带有DoSearch:function的产品界面

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]);
   }
}
我的问题是如何使业务类中的[parameters]和[return type]通用,因为根据产品类型,参数和返回类型会有所不同

使用此选项的客户端代码如下所示:

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

...process result code

我会实现这样的东西。它足够通用,代码的大部分可以在存储库的基类中实现

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

}

如果您可以添加一个调用存储库的示例,来完成这个示例,那就太好了。。。