C#如何使用谓词和动作委托构建逻辑工作流?
是否有一种设计模式可以应用于构建复杂的工作流,而无需编写多个条件语句和嵌套条件语句?我认为答案可能在于使用类似于规范模式的东西,但我不确定它是如何在C#中结合在一起的C#如何使用谓词和动作委托构建逻辑工作流?,c#,design-patterns,specification-pattern,C#,Design Patterns,Specification Pattern,是否有一种设计模式可以应用于构建复杂的工作流,而无需编写多个条件语句和嵌套条件语句?我认为答案可能在于使用类似于规范模式的东西,但我不确定它是如何在C#中结合在一起的 您可以将条件定义为枚举(或结构具有更大的可扩展性): 然后使用一个方法定义工作流项,例如ShouldExecute,该方法接受标志并返回true/false,如果该项应该运行 public class MyWorkflowItem : IWorkflowItem { public bool ShouldExecute(Wo
您可以将条件定义为
枚举
(或结构
具有更大的可扩展性):
然后使用一个方法定义工作流项,例如ShouldExecute
,该方法接受标志并返回true
/false
,如果该项应该运行
public class MyWorkflowItem : IWorkflowItem
{
public bool ShouldExecute(WorkflowFlags flags)
{
return (flags & WorkflowFlags.Retry) != 0;
}
}
您可以将条件定义为
枚举
(或结构
具有更大的可扩展性):
然后使用一个方法定义工作流项,例如ShouldExecute
,该方法接受标志并返回true
/false
,如果该项应该运行
public class MyWorkflowItem : IWorkflowItem
{
public bool ShouldExecute(WorkflowFlags flags)
{
return (flags & WorkflowFlags.Retry) != 0;
}
}
您可能可以使用规范模式对逻辑进行编码 这里有一个c#示例说明如何做到这一点 你可能在网上找到了很多例子 由于您的解释,我无法理解您为什么要使用规范模式来编写逻辑代码 在某一点上,您被迫使用条件语句 然而,看起来你可能想要这样的东西
public static void Reaction(this Func<bool> condition, Action conditionMet,Action conditionUnmet)
{
condition() ? conditionMet() : conditionUnmet();
}
公共静态无效反应(此函数条件、动作条件满足、动作条件未满足)
{
条件()?条件满足():条件未满足();
}
使用它的方法如下
Func<bool> CanDoAction = ()=> false;
Action behaviorAction = ()=> DoStuff;
Action behaviorUnableToDoAction = ()=> DoOtherStuff;
CanDoAction.Reaction(behaviorAction ,behaviorUnableToDoAction );
Func-CanDoAction=()=>false;
动作行为动作=()=>DoStuff;
Action Behavior UnableToDoAction=()=>DoOtherStuff;
CanDoAction.反应(behaviorAction,BehaviorUnabledoAction);
您可能可以使用规范模式对逻辑进行编码
这里有一个c#示例说明如何做到这一点
你可能在网上找到了很多例子
由于您的解释,我无法理解您为什么要使用规范模式来编写逻辑代码
在某一点上,您被迫使用条件语句
然而,看起来你可能想要这样的东西
public static void Reaction(this Func<bool> condition, Action conditionMet,Action conditionUnmet)
{
condition() ? conditionMet() : conditionUnmet();
}
公共静态无效反应(此函数条件、动作条件满足、动作条件未满足)
{
条件()?条件满足():条件未满足();
}
使用它的方法如下
Func<bool> CanDoAction = ()=> false;
Action behaviorAction = ()=> DoStuff;
Action behaviorUnableToDoAction = ()=> DoOtherStuff;
CanDoAction.Reaction(behaviorAction ,behaviorUnableToDoAction );
Func-CanDoAction=()=>false;
动作行为动作=()=>DoStuff;
Action Behavior UnableToDoAction=()=>DoOtherStuff;
CanDoAction.反应(behaviorAction,BehaviorUnabledoAction);
老实说,我认为你找错人了。您可以将条件组合成单个规范来封装它们,也可以为不同的条件创建不同的规范来命名它们,但我认为其他模式更合适——如果我正确推断您的需要的话
您希望实现“复杂的工作流”。对我来说,这意味着您希望实现具有许多分支点的业务用例。对于这些人来说,某种形式的培训是最好的开始 老实说,我认为你找错人了。您可以将条件组合成单个规范来封装它们,也可以为不同的条件创建不同的规范来命名它们,但我认为其他模式更合适——如果我正确推断您的需要的话
您希望实现“复杂的工作流”。对我来说,这意味着您希望实现具有许多分支点的业务用例。对于这些人来说,某种形式的培训是最好的开始 即使我发现在你的例子中使用条件语句是可以的,但是,你可以看看a可以解决这个问题即使我发现在你的例子中使用条件语句是可以的,但是,你可以看看a可以解决这个问题