什么是C#链接功能方法警告?怎么做" ifs"?

时间:2015-12-30 09:38:40

标签: c# functional-programming

最近我在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类,每一步都有表达式,而不是语句等。)

但问题是:

  • 这种方法是否涵盖了一些危险?他们是什么? (例如,调试起来比较困难)
  • 通常人们在链接方法方面做了什么,如果需要分支代码执行流程?用ifs在哪里打破链条?写" map-if"功能扩展(这不会创建意大利面条代码?)?

更新:有关此问题的更具体问题

实现代码分支的方法更好 - 打破这样的链接:

        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"实施"开关"分支?

0 个答案:

没有答案