У меня есть интерфейс
interface IRepository<T>
{
List<T> GetAll(string id)
List<T> GetAll(string id, string desc)
List<T> GetAll(string id, string desc, int[] status)
List<T> GetAll(string id, string desc, int[] status, ....)
}
Многие из моих классов реализовывали этот интерфейс. Моя проблема, чаще всего, когда клиенты запрашивают настройку, мне обычно нужно добавлять параметры в методы. Поэтому, когда у меня есть 10 классов, реализующих этот интерфейс, мне также нужно обновить каждый из классов, наследующих интерфейс (я использую абстрактный шаблон фабрики), что довольно сложно. И это также не очень приятно для глаз, видя перегрузку многих методов, как в примере выше, IMO. Есть ли какое-либо решение / обходной путь, чтобы сделать параметры динамическими (кроме опции param [], которая мне не нравится). Я имею в виду как выделенный параметр класса / интерфейса, так что мне не нужно перегружать метод при добавлении параметра. Что-то вроде этого
interface IRepository<T>
{
List<T> GetAll(Parameter args);
}
класс Paramter (или, может быть, интерфейс)
static class Parameter
{
public string Id { get; set; }
public string Desc { get; set; }
public int[] Status { get; set; }
}
пример реализации клиентами
class Client1Accounts : IRepository<Employee>
{
List<Employee> GetALl(Parameter param)
{
return DataFactory.GetAllById(param.Id);
}
}
class Client2Accounts : IRepository<Employee>
{
List<Employee> GetALl(Parameter param)
{
return DataFactory.GetAllByDesc(param.Desc);
}
}
class Client2Accounts : IRepository<Employee>
{
List<Employee> GetALl(Parameter param)
{
int[] status = { 99, 88 }
return DataFactory.GetAllFiltered(param.Id, param.Desc, status);
}
}
Таким образом, когда мне нужно добавить параметр, мне просто нужно добавить другое свойство в класс параметров
static class Parameter
{
public string Id { get; set; }
public string Desc { get; set; }
public int[] Status { get; set; }
public long newLongParam { get; set; }
}
Правильный ли этот подход? какие-нибудь другие идеи?