最近我在C#"中观看了Pluralsight课程和#34;功能编程。并在我的爱好项目中重写了一些方法。现在他们看起来像这样:
public override CommandLineResult GetResult()
{
return Disposable.Using(new IndicatorRepository(), repo =>
{
return repo.AddOrUpdateIndicator(Indicator, Value, DateTimeExtensions.LocalNow().Date);
})
.Map((p) => new NumericIndicatorRecorderedModel()
{
Id = Guid.NewGuid().ToString(),
DbActionPreformed = true,
IsRewritten = Convert.ToBoolean(p),
IndicatorName = Indicator,
Value = Value,
ValueDate = ValueDate
})
.Map((model) => new CommandLineResult()
{
ActionName = "~/Views/CommandLine/_clresult_NumericIndicatorRecorderedModel.cshtml",
Model = model
});
}
关于这种链式方法还有一些相似之处(我删除了使用Disposable类,每一步都有表达式,而不是语句等。)
但问题是:
更新:有关此问题的更具体问题
实现代码分支的方法更好 - 打破这样的链接:
public string GetResult(bool param) {
if (param) {
return MyClass.DoOneWay(p =>...).AlsoDo(q =>...).ToString();
}
else
{
return MyClass.DoOtherWay(p =>...).AlsoDo(q =>...).ToString();
}
}
或者实现功能性if-helpers,如下所示:
public string GetResult(bool param)
{
return MyClass.DoIf(param, p => ...., q => ....).AlsoDo(q =>...).ToString();
}
该怎么做,如果还有更多的选择,那么只有真/假? 如何" functionaly"实施"开关"分支?