很抱歉我想不出更好的标题。
问题如下:
对于我们的客户,我们创建了(作为更大应用程序的一部分)一个图形设计器,他们可以使用它来构建“场景”。
这些场景由“复合”组成,而“复合”又由“命令”组成。这些命令对象都派生自 CommandBase 并实现了一个名为 ICompilable 的接口。
场景类还实现了 ICompilable。当在命令上调用 Compile() 时,会返回一个字节数组,然后可以将其发送到它们所针对的设备(无法透露有关该硬件的太多信息,抱歉)
只是给你一个想法:
var scenario = new Scenario();
scenario.Add(new DelayCommand(1));
scenario.Add(new CountWithValueCommand(1,ActionEnum.Add,1));
scenario.Add(new DirectPowerCommand(23,false,150));
scenario.Add(new WaitCommand(3));
scenario.Add(new DirectPowerCommand(23,false,150));
scenario.Add(new SkipIfCommand(1,OperatorEnum.SmallerThan,10));
scenario.Add(new JumpCommand(2));
byte[] compiledData = scenario.Compile();
图形设计师从用户那里抽象出所有这些,并允许他(或她)简单地将复合材料拖放到设计师表面上。(组合可以对命令进行分组,因此我们可以为返回任务提供构建块)
最近我们的客户来找我们说,“设计师真的很酷,但我们有些人更愿意拥有某种编程语言,只是一些简单的东西。”
(当然对他们来说很简单)
我非常想为他们提供一种简单的语言,它可以调用各种命令,还可以用更好的结构替换 SkipIfCommand 等...
我不知道从哪里开始或我的选择是什么(不破坏我们所拥有的)
我听说有人嵌入诸如 Python 之类的语言,有人编写自己的语言和解析器,等等……
有什么建议么?
PS:用户只使用复合,从不使用命令。组合是在运行时动态加载的(连同它们的图形设计器),并且可以由第三方在单独的程序集中提供。