用于多个框架的CRUD代码生成的外部DSL

时间:2018-05-06 16:51:12

标签: scala groovy dsl xtext

我正在开发一个通用的CRUD代码生成器应用程序。我们的想法是,通常的插入,更新,列表,删除等操作的代码/文件(模型,控制器,视图)将自动从模型定义生成(如Grails中使用的定义)。但是生成的代码可以用于任何框架,例如Play(Scala或Java版)或Django或Grails或用户想要使用的任何框架,甚至是AngularJs。也就是说,相同的模型定义可用于为任何框架生成代码。

我的问题是,我可以将什么用于此任务 - Scala或Groovy或某些DSL专用工具,如Xtext?

1 个答案:

答案 0 :(得分:0)

这似乎是DSL的一个好例子。 DSL可以概括为以下3个元素:

  1. 抽象语法:DSL的概念。在这里,您要指定CRUD应用程序。
  2. 具体语法:实现抽象语法的一种方法。作为一名程序员,第一个想法通常是基于文本的语法,但你也可以使用图形或树状语法,甚至只是一个带有文本字段和复选框的GUI。
  3. 语义:DSL的含义。在这里,您要生成代码。
  4. 我现在建议一些基于Java的解决方案来自Eclipse Modeling生态系统。

    1. Eclipse EMF实现了所谓“元模型”定义的标准(基本上是抽象语法)。在Eclipse世界中,EMF是许多工具的基础。
    2. 假设您有EMF元模型,可以使用Eclipse Xtext指定文本语法,使用Eclipse Sirius指定图形语法。请注意,您还可以使用Java开发自己的GUI并使用EMF Java API创建模型。另请注意,Xtext可以根据基于文本的语法所需的语法为您创建元模型。如果您不想深入了解自己的EMF,那就太好了(因此步骤1和步骤2是同一个)。
    3. Eclipse Acceleo提供专门用于生成文本的模板语言,包括代码。再一次,您还可以使用普通Java或任何基于JVM的语言编写代码生成器,这要归功于EMF Java API。如果您使用Xtext,那么including an Xtend-based code generator还有一种便于您使用语法的工具。