アップデート
IReportRepositoryからデータを取得し、データを操作し、事前定義された式に従ってリスクを計算するRiskReportタイプがあります。
RiskReportタイプは正確な形式でデータを取得し、データ操作を実行しないようにする必要があると主張する人もいるかもしれません。RiskReportは、数式に従ってデータを計算する方法のみに関係する必要がありますが、IReportRepositoryは、RiskReportクラスに必要なデータのみを返す必要があります。
IReportRepositoryとRiskReportの間に新しいクラスを導入する必要がありますか?現在、IReportRepositoryから返されるデータは、リスクを計算するために必要な形式に操作されているためです。
class RiskReport
{
private IReportRepository reportRepository;
public RiskReport(IReportRepository reportRepository)
{
this.reportRepository = reportRepository;
}
public decimal CalculateDataBasedOnFormula()
{
var result = from d in reportRepository.GetReportRelatedData()
group d by d.Id into dgp //potentially complex grouping
select new
{
TotalPage = dgp.Sum(x=>x.Pages) //potentially complex projection
};
decimal risk= //use the result variable to calculate data based on complex formula not shown here
return risk;
}
}
interface IReportRepository
{
IEnumerable<ReportRelatedData> GetReportRelatedData();
}
public class ReportRepository: IReportRepository
{
public IEnumerable<ReportRelatedData> GetReportRelatedData()
{
//return data from underlying data source
return new BindingList<ReportRelatedData>();
}
}
public class ReportRelatedData
{
public int Id { get; set; }
public int Name { get; set; }
public int Pages { get; set; }
//... more properties here
}
任意のアイデアをいただければ幸いです!