1. 程式人生 > >Telosys:程式碼生成工具

Telosys:程式碼生成工具

在本文中,我們將檢查泰羅西斯,一個程式碼生成工具。我們會通過和作者談話來做到這一點,洛朗·蓋林。這將使我們有可能瞭解他對程式碼生成的看法,以及使用者通過使用Telosys實現了什麼。

為什麼程式碼生成工具相關?
程式碼生成是模型驅動開發中最簡單和最常用的技術。我們使用一種資訊源,一種模型形式,並將其與一些模板相結合,以獲得生成的工件,例如程式碼。

就我個人而言,我認為程式碼生成是進入更高階技術的一個有用的入門級步驟。因此,我認為非常重要的是建立簡單的程式碼生成平臺,以降低新使用者的進入門檻。

作為一個社群,我們希望將盡可能多的開發人員從編寫重複程式碼轉移到尋找更智慧的解決方案。如果我們使程式碼生成器可以訪問和有效,我們將“拯救”許多開發人員,並將他們帶到模型驅動的開發和語言工程方面。

因此,像Telosys這樣的可用和全面的程式碼生成器對於語言工程社群來說是非常有價值的。

這就是為什麼我認為和洛朗聊天會很有趣。作為Telosys的作者,他非常有能力向我們解釋人們試圖用程式碼生成來解決哪些問題,以及與他們相關的問題。

大圖景
你能告訴我們一些關於你自己的事嗎?
我是一名高階顧問,在軟體開發和架構方面有30年的經驗。我曾在不同的IT服務公司工作過,比如S否則,T-Systems,[和]Sogeti諮詢公司。在我的職業生涯中,我曾擔任過不同的職位:開發人員、專案經理、軟體架構師、專家、創新領袖和顧問。我對軟體工程,DevOps,軟體工藝和程式碼生成充滿熱情。我也是南特大學的兼職老師。

我們聯絡上了Telosys,你的程式碼生成系統。你能向我們的讀者描述一下這個專案嗎?
Telosys是一個“輕量級程式碼生成器”,我指的是“實用工具”。我建立了這個程式碼生成器,為開發人員提供了一個簡單易用的工具。Telosys被設計成在任何情況下都適用於每個人。它允許[惡豹]生成任何型別的語言,因此它是一個適用於所有型別專案的程式碼生成器。此外,所有元件都是免費的、開源的。

有關更多資訊,請訪問網站.

順便說一句,在你的網站上稱讚你的專案,它是非常清楚和設計得很好。我建議我們的讀者看一看。

從命令列使用Telosys

建築Telosys
你為什麼要建這個專案?
幾年前,我注意到開發人員花了大量時間對程式碼中重複和乏味的部分進行編碼。這是我們在所有型別的專案上遇到的一個普遍問題,而不管開發語言如何。在專案的啟動階段尤其如此。

因此,我首先通過建立框架和庫來減少手動編寫的程式碼量,從而對通用程式碼進行分解。但是仍然有許多具有重複結構的元件必須由開發人員手工建立(螢幕、控制器、DAO、單元測試等)。

只有程式碼生成才能減少此工作負載。但是,“經典”工具(MDA工具等)通常使用起來非常繁重和複雜(其中大多數都需要UML模型),因此,在中小型專案中使用它們是沒有好處的。

因此,我開始編寫不需要UML模型的程式碼生成器,開發人員可以在IDE或簡單的命令列中輕鬆使用它。

第一次使用Telosys的實驗版本使我的團隊能夠在2天內生成Java Web應用程式的整個持久層,而不是最初估計的52天。這鼓勵了我繼續我的工作,這就是Telosys誕生的原因。

您能告訴我們Telosys與其他程式碼生成器有什麼不同嗎?
首先,Telosys是由開發人員為開發人員建立的。它的目標只是務實和高效。

這一概念和發展遵循以下一些基本原則:

它必須簡單,易用,並保持輕。
它必須是100%的開放原始碼。
它必須能夠為任何型別的語言或框架生成程式碼。
生成的程式碼必須對工具沒有任何依賴(在不影響專案的情況下,可以在任何時候停止使用該工具)。
開發人員必須能夠使用任何文字編輯器輕鬆地調整模板。
開發人員必須能夠用“輕量級模型”(不需要UML模型)來定義專案實體。
因此,Telosys可以被視為一種戰術工具。這不是一個對專案組織有重大影響的戰略選擇。

您可以安裝它,使用它,並隨時刪除它。當然,您也可以從專案的開始到結束使用它,並利用模型和模板,這取決於您。

使用者通常使用您的軟體做什麼?
有些使用者只是使用現有的模板生成程式碼。其他人已經建立了自己的模板庫,並定期對其進行改進。

一個使用者已經用Telosys取代了一個專有和昂貴的程式碼生成器來生成他的C#Web應用程式。

另一個則使用Telosys作為部署在雲中的微服務和Docker。

有時候,Telosys也被用來學習一種新的語言。例如,如果您知道如何在Java中建立REST後端,並且不知道如何使用Python來實現,那麼只需安裝Python模板並生成程式碼即可。

如你所見,用途是多種多樣的。

您可以在EclipseIDE中提供工具的整合。建立Eclipse外掛有多困難?
Eclipse外掛的開發並不容易。特別是當您需要建立不同型別的視覺化元件時,例如編輯器、檢視、屬性編輯器、幫助頁等等。

為了提高效率,您必須掌握許多概念和API:

外掛架構,
訪問工作區資源的特定API,
用於圖形元件的SWT庫,
事件和任務管理,
Eclipse市場上的部署,
諸若此類

但是,一旦一切正常執行,就可以在Eclipse中使用Telosys,特別是用於建立模板包。

為什麼是Eclipse?你打算支援其他IDE嗎?
Eclipse之所以被選中,是因為在專案開始時,它是使用最多的IDE。從一開始(7年前),生成器的第一個版本就嵌入到Eclipse外掛中,並直接與模型編輯器耦合。

現在,基本元件顯然與GUI隔離。這些特性可以使用API呼叫,因此可以將生成器整合到任何Java應用程式中。

Telosys還可以與VisualSourceCode和Atom一起使用,這是命令列工具。已經為這些IDE建立了一些擴充套件,以便為Telosys檔案提供專門的編輯器。

我認為所有JetBrainsIDE(IntelliJ、PyCharm、PHPStorm、Goland等)配備一個Telosys外掛會很好,但現在我沒有足夠的時間來處理這個問題。也許明年吧。

在Eclipse外掛中使用Telosys
程式碼生成
您所看到的用於生成程式碼的用例是什麼?
程式碼生成對於為開發人員提供公共框架非常有用。如果每個人都通過程式碼生成開始開發,那麼您可以確保所有團隊的基礎都是一致的,並且程式碼具有令人滿意的質量(在標準、註釋、單元測試等方面)。

當然,另一個要點是生產力。在建立元件的初始步驟中,您可以顯著減少工作負載。您管理的實體越多,您可以投資建立模板的時間就越多。

程式碼生成也可用於快速生成應用程式的動態模擬。然後,程式碼可以在迭×××發週期中重用。

基於現有資料庫的“腳手架”方法也非常有效。我已經多次使用它,用於新專案或從一種語言遷移到另一種語言。

在使用程式碼生成的專案中,是否手動更改程式碼?您經常需要雙程程式碼生成嗎?
我估計,在80%-90%的情況下,我不需要生成雙向程式碼。

對於開發人員來說,使用雙向程式碼生成通常並不容易,因為他們必須記住生成器在程式碼中能做什麼或不能做什麼。此外,它還會對原始碼產生影響,因為它需要管理標記。

您見過哪些公司使用程式碼生成?他們得到了什麼結果?
我見過各種各樣的公司使用程式碼生成。但通常只有大公司才能安裝重型工具。這些公司通常有繁重的流程和管理手段。但是,這種型別的工具(複雜的設定和使用)有時會被放棄,因為它們最終會減緩開發(這是一個恥辱)。

反應性或敏捷公司通常需要更簡單和更輕的工具。

結果好壞參半。這取決於背景。程式碼生成並不適合所有情況。設定工具的成本有時被低估。當你有一個工具,你不應該試圖生成所有的東西,你必須知道什麼時候停止。

如何使用程式碼生成
您最常使用的模板、資料庫的資料來源是什麼?JSON還是CSV檔案?其他訊息來源?
作為每個程式碼生成器,Telosys將模板與儲存在記憶體中的資料合併。

這些資料主要是專案管理的實體。所有實體都是在一個“輕量級模型”中定義的,該模型可以是“資料庫模型”,也可以是“DSL模型”。

Telosys的模型在網站上解釋,本頁.

使用關係資料庫作為源,Telosys自動建立資料庫模型。在這種情況下,使用資料庫模式作為原始模型,每個表被視為一個實體,關係由外來鍵定義。

這種模型儲存在單個XML檔案中。如果需要對模型進行一些更改,則使用者可以對其進行自定義。

在要從頭建立模型的情況下,可以使用DSL模型。在這種情況下,每個實體都定義在一個文字檔案中。Telosys有自己的語法來定義實體(請參閱DSL語法引用).

因此,總之,Telosys使用XML和文字檔案以及專門的編輯器來簡化模型編輯。

記憶體中載入的模型是“泛型模型”,是具體模型的抽象。因此,在未來,它將有可能使用任何型別的原始碼,可以匹配這個“通用模型”。

誰通常編寫模板?有開發人員或專業顧問嗎?
現在,有了3.0版本、它的文件和專門的編輯器,任何開發人員都可以自定義現有的模板或建立新的模板。

這已經在許多不同級別的開發人員的專案中得到了驗證。每次開發人員在使用大約一天之後都是自主的。

你是從事其他GPL或DSL的轉發器的工作嗎?
還沒有,但從版本3開始,DSL模型現在是Telosys的參考模型,我認為有一天有必要將不同型別的源轉換到這個模型。例如,XMI可能是Telosys的第三種模型,也許將XMI原始碼轉換為Telosys DSL模型比建立通用模型的新實現要簡單一些。

關於開源專案
你為什麼要開始這個開源專案?
20多年來,我一直是開源的支持者。對我來說很明顯。我從未想過要建立一個非開源的工具。我想與使用者分享一切,包括原始碼。我希望社會人士能夠成長,並提供新的意見,以繼續改善這個工具。

你收到很多請求支援嗎?
是的,由於3.0Telosys版本的下載越來越多,我通過電子郵件、通過論壇或通過GitHub.

也有趣的建議,新的想法,新的期望等。

你是如何傳播關於你的產品的聲音的?
到目前為止,網路是傳播資訊的主要載體。

在Telosys上的通訊是最近的,我等待3.0版本(一個主要版本)的釋出來開始釋出文章和文件。但從第一個版本開始,一些使用者就一直在關注這個專案。

Telosys網站現在是發現該工具的主要入口點。YouTube上還有一些視訊,一個論壇,一個Twitter帳戶..LinkedIn組等GitHub是原始碼的參考,也是一些wiki的宿主。幾個月前有人建立了一個StackOverflow上的“Telosys”標籤所以你現在可以在這個神奇的網站上問你的問題了。

有時,我會在技術會議、開發者小組或大學裡演示。如果你想要簡報,請隨時與我聯絡。

你有計劃把你的工作賺錢嗎?
不,目前還沒有計劃。

結論
在MDD或語言工程中,您是否對程式碼生成或一般情況感到興奮?
有不同的方法來考慮程式碼生成。就我而言,我走的是實用主義和輕盈的道路。這種方法允許我建立一個實用的生成器,它完成了一組現有的工具,比如經典的MDA工具。

從開發人員的角度來進行程式碼生成對我來說是最有趣的方面。程式設計是一門技術,也是一項艱鉅的工作。建立幫助開發人員更好、更快地工作的工具是非常有動機的。但這不僅僅是生產力問題,當然也不是試圖減少開發人員角色的問題。發電機不能取×××發者!一個工具不能代替開發人員思考,它只能複製開發人員預先設計的N倍。它只會騰出時間來處理開發中有趣的部分,即具有實際增值功能的元件。

設計一個“開發人員同伴工具”是非常令人興奮的,而且總是有一些改進要新增到該工具中。這就像聖盃之旅,是個沒完沒了的故事。

你有什麼專案或資源,我們的讀者應該調查嗎?
在部落格“建模語言”上有一篇關於Telosys的文章,可能很有趣:Telosys:用於程式碼生成的輕量級模型的概念."

更廣泛地說,所有涉及軟體工藝、乾淨程式碼、低程式碼等的書籍或文章。

例如,一本啟發我的書:實用程式設計師作者宣告:David Thomas。這本書包含了許多關於軟體開發的偉大思想,特別是一些章節,如“域語言”、“純文字的力量”、“程式碼生成器”和我最喜歡的一章“程式碼生成器不必複雜!”

知道嗎奧博?似乎MDD在南特很強大。你和你一起工作過嗎喬迪·卡博特?
是的,我認識Obeo,尤其是其中的兩個創作者(Etienne和Stephane)。

我也認識喬迪,他在南特的時候我和他談過。

事實上,在南特有許多人圍繞著MDD/MDE工作。

你還有什麼要補充的嗎?
給讀者一個小小的資訊:如果您對使用實用/輕量級工具生成程式碼感興趣,如果您想分享有關它的想法,請毫不猶豫地通過以下方式與我聯絡我的推特賬戶 just send a mail at [email protected]

非常感謝勞倫特的這次採訪和他在泰羅西斯的工作!