Vic*_*cky 6 c# oop refactoring
以下是一种方法:
private RiskFactor calculateMotoristRiskFactor()
{
if (motorist.PointsOnLicense > 3
|| motorist.Age < 25)
return RiskFactor.HighRisk;
if (motorist.PointsOnLicense > 0)
return RiskFactor.ModerateRisk;
return RiskFactor.LowRisk;
}
Run Code Online (Sandbox Code Playgroud)
我不想要那些if语句.
我可以使用策略模式来解决这个问题吗?如果是,那么我也不希望不同的多态类中的每个方法都应该有一个If语句.
RiskFactor是一个枚举
有没有更好的方法来使这更加面向对象而不是程序化?
好吧,你可以有一个List<Tuple<Func<Motorist, bool>, RiskFactor>:
var filters = new List<Tuple<Func<Motorist, bool>, RiskFactor>
{
Tuple.Create(m => m.PointsOnLicense > 3, RiskFactor.HIGH_RISK),
Tuple.Create(m => m.Age < 25, RiskFactor.HIGH_RISK),
Tuple.Create(m => m.PointsOnLicense > 0, RiskFactor.MODERATE_RISK),
};
Run Code Online (Sandbox Code Playgroud)
然后:
var risk = filters.Where(filter => filter.Item1(motorist))
.Select(filter => filter.Item2)
.DefaultIfEmpty(RiskFactor.LOW_RISK)
.First();
Run Code Online (Sandbox Code Playgroud)
至少可以很容易地添加额外的检查,它只是按顺序运行它们.它有点繁琐 - 我可能会创建一个自定义Filter类型而不是Tuple例如 - 但它应该工作...