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 使用模板建立該工件,由於產生器是可插拔的,框架不會與任何特定的模板技術相耦合,JET 和 Velocity 是常用的兩種融合技術,你可以對一些工件使用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
相關文章
- 生產製造追溯系統-條碼列印
- 製造業MES生產管理系統原始碼原始碼
- 用資訊科技打造大規模定製的生產模式模式
- 程式碼生 成器:程式設計師生產力快速提升工具程式設計師
- 生產消費實現-寫程式碼
- Kafka java api-生產者程式碼KafkaJavaAPI
- 使用者定製再度興起,定製產品小程式將迎來春天!
- JavaScript產生隨機數例項程式碼JavaScript隨機
- 如何製作VB程式記憶體序號產生器--國內某軟體的序號產生器(隱去軟體資訊) (14千字)記憶體
- [轉]Wing IDE 6.0 安裝及算號器序號產生器程式碼IDE
- 製作mIRC6.02序號產生器(給別人寫的初學者序號產生器教材) (14千字)
- 序號產生器合集
- MP3 explorer 破解和序號產生器的製作
- 產假計算器php程式碼PHP
- 讓敲過的每行程式碼產生價值行程
- 軟技能-程式碼之外的生存指南4(生產力)
- 三端(本地,測試伺服器,生產伺服器)git程式碼的同步(不會CI|CD)伺服器Git
- 生產環境搭建MySQL複製的教程MySql
- 如何科學設定生產節拍?
- Jutoh 3.03.10中文版 電子書製作工具(序號產生器)
- 《淺談利用RSA演算法防止非法序號產生器的製作》演算法
- 國產Dhyana禪定x86處理器開始啟動生產
- 百度Comate開放外掛生態,智慧程式碼助手定製化時代來臨
- 零程式碼組態搭建的水泥生產工藝流程
- js實現的產生隨機數程式碼例項JS隨機
- 定位生產環境中介軟體的問題程式碼
- Laravel 程式碼生成器 + 可深度定製模板Laravel
- mIRC v 6.16序號產生器C語言原始碼C語言原始碼
- 守財奴1.9註冊分析+序號產生器原始碼原始碼
- 低程式碼推進服裝產業數字化升級,智慧製造賦能企業柔性生產產業
- readbook的序號產生器源程式(c++builder5)C++UI
- Myeclipse 6.5 序號產生器Eclipse
- 生產環境中MySQL複製的搭建KPMySql
- MRP製造令和excel生產計劃Excel
- SciTech-Physics-Glass: “浮法”玻璃生產製造
- 一個CrackMe的破解以及序號產生器的製作 (4千字)
- EditPlus 2.01b 序號產生器的製作 (22千字)
- 《JavaScript DOM程式設計藝術》作者談:原型程式碼與生產程式碼之間的矛盾JavaScript程式設計原型