class Result
{
public string Data { get; set; }
}
interface IRepository
{
Result[] Search(string data);
}
У меня довольно общий интерфейс, который ищет «что-то» и возвращает Result
. Интерфейс IRepository
может быть реализован несколькими классами, каждый из которых возвращает свой собственный Результат со своими уникальными метаданными. Например, у меня может быть DiskRepository
, который ищет данные на диске:
class DiskResult : Result
{
public int FileSize { get; set; }
public DateTime LastModifiedDate { get; set; }
}
class DiskRepository : IRepository
{
public Result[] Search(string data)
{
// ...
DiskResult[] results = GetDataFromSomewhere();
return results;
}
}
DiskResult
содержит дополнительную информацию о результате, специфичном для DiskRespository
. Если бы я создал другой класс, который реализует IRepository
, эта конкретная реализация может иметь свой собственный набор метаданных, уникальных для этого класса.
В конце я хотел бы, чтобы мой контроллер поиска выглядел так:
class SearchController
{
private IRepository[] _repositories;
public SearchController(IRepository[] repositories)
{
_repositories = repositories;
}
public void Display(string data)
{
Result[] results = _repositories.Search(data);
// Display results
}
}
Я могу легко отобразить свойство Data
в своем классе Result
, но есть ли хороший шаблон для отображения метаданных для каждого класса, который получается из Result
? Я мог бы иметь несколько операторов if
, чтобы проверить, относится ли класс к типу, но это кажется немного неуклюжим. Есть ли лучший способ сделать то, что я пытаюсь достичь?