这个问题也许是综合,让我展开:

  • 它不会存在 设计师 (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设计师.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top