当前位置:  开发笔记 > 编程语言 > 正文

使用DSL生成C#代码

如何解决《使用DSL生成C#代码》经验,为你挑选了2个好方法。

目前我正在使用的项目没有完全固定的模型(由于外部影响),因此我希望能够灵活地编写它们.目前,它们跨应用程序的三个不同层(db,web api和客户端)进行复制,每个层都有类似的逻辑(即验证).

我想知道是否有一种方法可以让我编写一个模型文件(例如在ruby中),然后让它将该模型转换为必要的c#文件.目前看起来我只是编写了许多可能在任何阶段发生变化的样板代码,而这种生成的方法可以让我专注于更重要的事情.

有没有人有这样的建议,一个dsl /语言我可以做到这一点,并且有没有人有这样的事情的经验?



1> Jonathan Par..:

我见过一个使用部分类和部分方法的系统,可以在不影响自定义代码的情况下重新生成代码.如果您将完全从Visio状态图生成"规则引擎".这基本上是糟糕的勒芒工作流程,但很容易修改.Viso图被导出为XML,使用powershell和T4读入以生成类.

以上示例是外部DSL.IE是应用程序运行的编程语言的外部.另一方面,您可以创建一个内部DSL,它在编程语言中实现和使用.

这篇以及之前关于 Code-Magazine的DSLS的文章非常好.

在上面的链接中,Neal Ford向您展示了如何使用流畅的界面在C#中创建内部DSL.

他还没有提到的一件事是你可以将这个属性[EditorBrowsable(EditorBrowsableState.Never)]放在你的方法上,这样它们就不会出现智能感知.这意味着您可以从DSL的用户隐藏类上的非DSL(如果您愿意)方法,使得更流畅的API更容易被发现.

您可以看到Daniel Cazzulino在撰写带有TDD的IoC容器时,在此视频系列中直接编写了流畅的界面

关于外部DSL的主题,您还可以选择Oslo(目前是CTP),它具有强大的功能,可以让您创建可以直接执行的外部DSL,而不是使用代码生成来实现它根本不是一个DSL.



2> Mark Cidade..:

这可以通过ANTLR轻松完成.如果输出足够相似,您可以简单地使用文本模板机制 - 否则它可以生成一个抽象语法树供您遍历.

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有