C# 类似工作流的系统,用于更改代码流

C# 类似工作流的系统,用于更改代码流,c#,workflow,dynamic-code,C#,Workflow,Dynamic Code,我需要关于我们的项目之一的要求的建议。我们试图实现的是控制来自文本或XML文件的方法调用流 例如: string response = new Assembly1.Class1().DoStuff(); if (response == "OK") { new Assembly1.Class2().DoStuff(); } else if (response == "NOTOK") { new Assembly2.Class1().DoStuff(); } 如何以非技术用户可以更改的格式

我需要关于我们的项目之一的要求的建议。我们试图实现的是控制来自文本或XML文件的方法调用流

例如:

string response = new Assembly1.Class1().DoStuff();
if (response == "OK")
{
  new Assembly1.Class2().DoStuff();
}
else if (response == "NOTOK")
{
  new Assembly2.Class1().DoStuff();
}

如何以非技术用户可以更改的格式表示上述代码,以修改函数调用的顺序。

我认为您可以使用反射实现此目的,或者从xml动态生成代码。 这里有很多样品。

可能对您有很大帮助。使用factory模式,您可以在运行时分配对象,并让这些对象决定流程的流程

您应该使用方法(例如WorkFlow()(在接口中引用))构建不同的类。该方法应该能够根据需要调用其他方法


在流程开始时,您只需读取XML文件并为适当的类创建一个对象,然后调用该类的工作流方法,该方法将执行预先确定的序列。

基本上,您必须决定要完成的任务

C#代码包含一定的复杂性,但所有这些复杂性都存在,因为C#代码非常灵活

您必须决定要给非技术用户多少灵活性。如果你想给它们和C语言一样的灵活性,那么你最好让它们用C语言编程

否则,第一步将是发明一种特定于领域的语言来描述他们将要进行的配置。不过,在您这样做之前,您可能需要研究是否有任何现有的特定于领域的语言已经完成了您所描述的任务


定义了特定于领域的语言之后,下一步是解析和解释该语言。这是一门相对复杂的课程,通常是大学一个学期的编译器课程的主题。如果你没有参加过编译器课程,你可以读一些书。通过使用XML等标记语言和标准XML解析库,您可以跳过很多步骤。

那么,您想用XML表示C代码吗?这对“非技术用户”来说更容易,用什么方法呢?作为可定制工作流过程的一部分,这是一个好问题。非技术部分有点错误。。我们需要的是能够改变流量。它不会被非技术人员更改。是否有任何简单的开源项目可以为我做这项工作。关于“可自定义工作流过程”解决方案有什么好的建议吗。@纳维德,对不起,我不认识任何人。正如Joel所说,您可以创建自己的简单DSL。我检查了简单状态机项目(),该项目使用boo编写的DSL,但并不完全符合目的。DSL是正确的方式吗?因为在我的情况下,工作流程不会那么复杂;将有简单的函数调用和if语句。如果您试图根据输入数据更改控制流,状态机无疑是正确的选择。状态机很容易实现和计算。。。如果你打算使用一个,只要学会写你自己的,这是一个开始编程的问题。至于要使用哪种DSL,这实际上是一个设计决策。你可以发明你自己的,或者试着找到做过类似事情的人。