Мне нужна помощь с проблемой проектирования (шаблон проектирования репозитория) в C #. У меня есть система с несколькими типами «продуктов». Каждый продукт имеет функцию поиска. Я хочу разработать многоразовый / универсальный интерфейс поиска. В зависимости от продукта, критерии поиска будут отличаться, а также возвращаемые данные.
Функция поиска будет искать только в пределах определенного типа продукта. На данный момент Поиск является единственной функцией, но в будущем могут появиться другие функции, такие как «GetByID», которые также будут вести себя по-разному в зависимости от типа.
Вначале я думал о создании интерфейса «product» с функцией «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