class Result
{
public string Data { get; set; }
}
interface IRepository
{
Result[] Search(string data);
}
派生型を返す私は「何か」を検索し、Result
を返し、かなり一般的なインタフェースを持っています。 IRepository
インターフェイスはいくつかのクラスで実装でき、それぞれ独自の独自のメタデータで独自のResultを返します。例えば、私は、ディスク上のデータを検索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
を実装する別のクラスを作成した場合、その特定の実装には、そのクラスに固有の独自のメタデータセットがある可能性があります。最後に
、私は私の検索コントローラは、次のようになりたいのですが:
私は簡単に私のResult
クラスにData
プロパティを表示することができますが、メタデータを表示するための良好なパターンがありますResult
から派生する各クラス? if
の文を使って、クラスが型かどうかを調べることができますが、それはちょっと鈍い感じです。私が達成しようとしていることをするためのより良い方法はありますか?あなたは結果を表示する結果クラスのvirtual
メソッドを持つことができ
interface IRepository<T>
{
T[] Search(string data);
}
これはSRPに違反します。プレゼンテーションはドメインから分離する必要があります。 – Eranga