Skyway定制代码产生器

SkywayBuilder的核心就是Skyway产生框架(Generation Framework)。我们基于Eclipse引擎的产生框架提供了可扩展的代码产生功能,和scaffolding能力。Skyway代码产生框架使用XML模型(尤其是EMF)作为输入,并产生文件和工件(artifacts)。最近,在我们提供的标准代码产生和scaffolding之外,我们看到催生出大量的使用Skyway产生框架,并根据他们企业自己的技术需求创建出的客户化的产生平台。在Jack提交的Blog日志“Top 10 Principles of Code Generation ”认为,扩展性(extensibility)是关键。我们相信一个好的代码产生系统必须是可扩展的(extendible),可配置的(configurable),和在每个level都能进行自定义(Customizable).这一系列的blog是对Skyway的扩展架构进行更深入地回顾,并描述了我们的自定义代码生成处理的能力。

 

 

 

Skyway Generation Framework

 

Skyway产生框架能被用来产生人呢一类型的文本文件。产生处理能被显示地通过一个JavaAPI执行或者配置为自动执行,当一个模型通过EclipseBuilder对模型进行改变的时候,相应的代码就会自动生成。目前,产生引擎运行在EclipseIDE的内部,但是正计划允许headless execution

框架以工件集(artifacts sets)为核心,它由工件定义(artifacts definision),发射(emitters)和无效器(invalidator)组成。由于工件集被链到Eclipse的门面facets上,因此,他们可以很容易地从一个模型项目中被部署或者移除。这个模型项目允许开发者从同一个应用程序模型中产生不同的代码版本。

 

一个工件定义描述了一个工件,并由一个模板(template),一个产生器(generator),一个美化器(beautifier)和一个集成器(merger)组成。

 

 

  • template 是工件的设计蓝图
  • generator 使用模板创建该工件,由于产生器是可插拔的,框架不会与任何特定的模板技术相耦合,JETVelocity 是常用的两种融合技术,你可以对一些工件使用JET,对另一些工件使用velocity
  • beautifier 用来清理产生的文件。通过使用一个美化器,模板作者无需为Java,XML文档的缩进,模块配对美化问题而担心
  • merger 用来解决当产生的文件必须融合另一个版本的同样文件时的问题。一个merger允许用户修改一个产生的文档,当用户对文档进行重新生成时,这些修改将不会被覆盖。来自EMF的JMerger,被用来对Java源代码文件进行处理,但是其他merger可被书写并被插入。JMerger由一个规则文件控制,SkywayBuiler的stock工件集是一个定义了这些规则文件的工件,因此它被产生于每个项目中。这些文件可以非常容易被访问到和暴露出来,因此这些Java merging规则能够根据特定的情况进行调整

 

所有的Skyway模板使用JET开发,org.skyway.integration.java 插件提供了许多客户化的JET标签(Tags),大大扩充了JET框架提供的那些基础标签。这些标签封装了可重用的Java代码片段。例如,当一个Java抛出语句块的时候,可以使用ThrowsListTag,当需要Java包语句的时候,可以使用PackageTag标签。只要你不扩展SkywayJET模板,Skyway的JET标签库能独立于产生代码框架运行。

我们的JET标签大量使用发射器(emitter),发射器是一些小的代码,它知道如何来发出一些常用的字符串。发射器不与JET耦合,这样就允许你将他们使用在其他的模板框架中,或者是非代码产生器里。当然,发射器是可插拔的,也可被复写。

 

产生的作用范围(scope)是由invalidator控制的。一个invalidator可以让一个模型改变的时候让另一个模型变脏(dirty)的方式。例如,你可能希望在你改变数据库设置的时候,重新生成所有的数据对象。对于这些常见的情况,例如,使项目变脏,我们提供了stock invalidator。

 

 

 

Extending the Framework

 

Skyway产生框架是非常可扩展的,通过使用Java,它能被定制为大量的不同用途。当试图构架一个新的产生框架时,许多用户从一个现有的工件集开始,这些工件集他们需要在某种程度上进行修改,并允许使用现存的模板以节省大量时间。例如,用户希望产生基于Spring的web应用程序,可以通过从Skyway的工件集开始,然后定制Skyway模板以满足他们自己的特定需求。(我们的开源项目和商业版本Skyway Builder 就是这么做的)

 

对于用户选择修改一个现有工件集,在SkywayBuilder中有4中通用方法来完成此事。

 

 

  • 添加,移除或复写一个工件的定义
  • 添加或复写一个发射器
  • 添加或复写一个无效器
  • Scaffolding

我下面的一些Blog将对上述4中方法进行详细地表述。

也可以创建一个完全新的工件集,并将他与我们的门面耦合。如果你选择创建你自己的工件集,你将创建你自己的Eclipse门面并将他链到新的工件定义。你可能选择使用现存的Skyway应用程序模型(在EMF中),或你可能创建一个你自己的支撑模型(backing model).如果你使用我们的应用程序模型,你可以继续使用我们的用户接口优势,即便你选择创建你自己的工具集,你仍能从一些现存的Skyway组件获益来产生(generation),来融合(merging),来美化(beautifcation).

 

Summary

 

查看更多关于Skyway扩展架构的日志,和我们对于客户化代码处理的能力,将在随后几周提交。在此你可以通过这个链接,下载或者检出SkywayBuilder 源代码

 

 

 

这里再提供一个视频资源:QuickStartForSpringMVC Scaffolding

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值