DSL:从DSL规则进C#表达式
-
09-09-2019 - |
题
这个问题也许是综合,让我展开:
- 它不会存在 设计师 (stub/framework/meta-的设计师)建立和/或基于规则的基础上。净对象的公共bool性?保存为任何DSL/嘘/...输出。
- 是否有可能编写 DSL输出入C# 表情?
我们的主要问题之间的差距的文件和代码。我们的产品的基础上数以百计的用户definied的规则和我们想要加快变更请求。
如果我们能够得到一个简单的设计的用户和抓住的输出,然后翻译/编入C#/IL码我们有一个快速变化的要求循环。
我知道我们的问题,这是特定的,但任何"砖墙"欢迎!
例:
C#类,但须:
public class TestA
{
public bool B {...}
public bool C {...}
}
在设计师,我们应该能够创造
- 任何类型的图形设计员(ie。拉到选中的公共性质)
输出DSL:
If TestA.B AND TestA.C Then Return True;
产出C#:
if (testA.B && testA.C) { return true; }
更新#1
我将很高兴与DSL语支持使用静类型。网课程。我的意思是,如果用户能够检查代码("输出DSL" 在例),我们不需要设计师。
更新#2
根据报,我盯着表达的树木。几天后我跑到DLinq-我从来都不是一个大风扇DLinq但在这种情况下适用的问题领域非常好。
- 很容易分析 (A>2和B < 4)或C=5 到达树
- 易创造表情像这样
- 非常容易serialize/deserialize
- GUI基于FlowLayoutPanel作为"表达的建设者"
解决方案
你可以建立这样的事情你的自我。
你可以得到一个列表中的所有公共性质的一类使用类型。GetMembers()
然而,不是产生C#代码,我会使用的表达的树木。
这样,你不需要涉及C#编译器时的用户改变的规则。相反,可以储存的规则在一个数据库,载它们在运行时,然后使用的表达。汇编()方法,以创建一个委托,你可以调用以运行的代码。
更新:
在评论中有人问"之间的区别是什么表达的树木和领域特定的语言?"
这里的答案:
表达的树木和领域特定语言是正交的事情。
表达束仅一个API表示C#表,便可以转换成代表的动态。
DSL,或者领域特定的语言,是一种编程语言设计要解决的一个狭窄的类别的问题。
他们基本上完全不同的事情。
你可以使用的表达的树木作为一部分的DSL执行情况,如果你喜欢。皇宫使用它们为这一目的。
在你的情况,但是,你不需要一个DSL。什么你需要的是一个用户接口,产生规则(类似的方式outlook作品),然后一方式执行这些规则。
创建UI只是正常的UI发展。
表达树是什么你可以用于执行的规则。
其他提示
这是一个鲜为人知的事实,设计用于Windows的工作流程的基础及其规则发动机特别是可以托管,在Windows形式应用程序的独立自Visual Studio.规则撰写的,在这种方式同样可以评估独立的一个实际的工作流程。
看看 WF方案指导:工作流程重新设计-主机 和 教程:托管WF设计师.