存储库模式问题和泛型?

Dav*_*vid 2 c# generics design-patterns

我需要帮助解决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]
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我会有一个"商业"课程

public class ProductBusiness
{
    IProduct _product;

    public ProductBusiness(IProduct product)
    {
      _product = product
    }


   public [return type?] DoSearch([parameters])
   {
      return _product.DoSearch([paramters]);
   }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是如何使业务类中的[参数]和[返回类型]"通用",因为根据产品类型,参数和返回类型会有所不同?

使用它的客户端代码看起来像这样:

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

...process result code
Run Code Online (Sandbox Code Playgroud)

And*_*nov 5

我会实现这样的事情.它足够通用,代码的最大部分可以在存储库的基类中实现.

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

}
Run Code Online (Sandbox Code Playgroud)