存储库模式问题和泛型?

时间:2011-02-03 17:00:12

标签: 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]
    }
}
那么我会有一个“商业”课程

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

1 个答案:

答案 0 :(得分:5)

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

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

}