更新
我有一个RiskReport类型,它从IReportRepository获取数据,操纵数据,并根据预定义的公式计算风险。
有人可能认为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
}
任何想法都会受到赞赏!
答案 0 :(得分:1)
我有一个Report类型,它从IReportRepository获取数据,操纵数据,以及 根据预定义的公式计算费率。
我认为答案在你的第一句话中。如果您希望代码良好,请将其设为SOLID。 “S”代表单一责任原则。换句话说,如果你描述一个类的作用,不要使用“和”这个词。相应地改变你的设计。
答案 1 :(得分:0)
我认为这是其中一个问题,如果你问1000个开发者你可以得到1000个答案,但是,我会说应该使用另一个类。这是我的理由:
如果我必须继承代码库,我想在这里看到三个类,所以如果我正在开发它,那就是我想留下的下一个dev。
干杯。