.net 在为规则引擎创建DSL时使用什么技术?
你会推荐什么技术来为一个客户创建DSL?为什么 建立了框架的体系结构,并通过一个产品测试进行了验证。我只想创建一个.NET处理器,将人类可读的规则转换为编译后的规则实现 我知道的选项有:.net 在为规则引擎创建DSL时使用什么技术?,.net,f#,dsl,rules,boo,.net,F#,Dsl,Rules,Boo,你会推荐什么技术来为一个客户创建DSL?为什么 建立了框架的体系结构,并通过一个产品测试进行了验证。我只想创建一个.NET处理器,将人类可读的规则转换为编译后的规则实现 我知道的选项有: 使用编译管道 使用F#- 不幸的是,鉴于DSL语法(这将不断发展),这些方法都没有提供任何东西来构建或多或少友好的IDE来编辑DSL 有什么想法或提示吗?如果您想创建一个友好的IDE来编辑DSL,使IDE完全图形化,并编译成.NET对象(或者使用类似IronPython的语言作为粘合语言) 如果规则足够简单
- 使用编译管道
- 使用F#-
有什么想法或提示吗?如果您想创建一个友好的IDE来编辑DSL,使IDE完全图形化,并编译成.NET对象(或者使用类似IronPython的语言作为粘合语言) 如果规则足够简单,则可以图形化地实现整个规则结构。 如果规则足够复杂,“人类可读性”将成为一个不可能实现的目标 无论哪种方式,如果创建中间代码的一组.NET类或IronPython对象不够“人类可读”,那么很有可能,您需要的是比语法更虚假的证明
也就是说,如果您只想创建一种程序员可以用来创建业务规则的简单语言,请随意使用上述任何一种语言,并将语法简化到不需要Visual Studio的IDE。用于业务规则的图形化语言不是一个好主意。我会避免it业务规则中有大量的if检查和循环,这些都不能很好地可视化 您最好使用文本语言来描述业务规则 要获得编辑代码的非凡用户体验,您需要:
如果你能避免VS集成,我会的。集成到VS中需要大量的管道,互操作可能会引起麻烦。有几家公司出售您将解析器连接到的windows窗体编辑器控件。与VS.相比,它更容易集成。另一个可能有趣的选择是使用F#quotes 引用允许您将程序的一部分作为数据处理,因此您可以获取AST,分析它并将其翻译成其他语言,或者以某种非标准方式执行它。再加上F#的灵活性,你应该能够表达很多东西,因此你必须开发一个内部的F#DSL/combinator库来描述规则,并为F#Quotes开发一个翻译器/解释器来运行它们 不确定业务规则可能是什么样子,但您可以这样写:
let rule = <@
if (exists customer having validEmail) then success
else require whatever
@>
let规则=
我在我的博客上写了一篇关于这个话题的介绍。不幸的是,在F#CTP中已经有了一些大的变化,我还没有更新源代码,但它应该能让您很好地了解这种方法的可能性和局限性
- -TomasP.Net
- -马修·波德维索基
- 如果您使用VisualStudio编辑DSL(并且您可以使用免费安装了F#的Shell版本),您将免费获得非常好的编辑体验。不仅是语法突出显示,还有IntelliSense,它将建议可能的结构,还有一个后台类型检查,作为DSL的“语法”检查器
- 与其他方法相比,这可能是最容易实现的方法之一
- 唯一的限制是您受到F#语法的限制。然而,设计自己的语言确实很困难,所以这可能一点也不坏。特别是考虑到F#的灵活性
希望这有帮助 我会使用Boo,我认为它是目前创建DSL最灵活的工具之一。关于这个问题有一个很好的解释。博客也是很好的灵感来源 关于IDE,您可以扩展,看看。JetBrains 您可以为任何新语言定义自定义语言编辑器和其他约束,以便使用这些DSL变得非常简单。不熟悉传统编程的领域专家可以使用domai轻松地使用其领域特定语言在MPS中工作