我需要帮助解决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
答案 0 :(得分:5)
我会实现这样的事情。它足够通用,代码的最大部分可以在存储库的基类中实现。
public interface IRepository<T> where T: IProduct
{
IEnumerable<T> Search(Predicate<T> query)
IEnumerable<T> Search(IEnumerable<Predicate<T>> query>
}