自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

可以編寫(xiě)代碼的代碼:代碼生成的利與弊

新聞 前端
代碼生成的當(dāng)前狀態(tài)是無(wú)處不在的(2019年春季)。REST API的數(shù)量激增,導(dǎo)致在過(guò)去十年中針對(duì)各種編程語(yǔ)言和環(huán)境開(kāi)發(fā)的API客戶端生成器種類繁多。

 

[[281681]]

代碼生成的當(dāng)前狀態(tài)

代碼生成的當(dāng)前狀態(tài)是無(wú)處不在的(2019年春季)。

如今,代碼生成發(fā)生在軟件堆棧的每一層,

  • 包括Java庫(kù)(如swagger CodeGen),
  • 最新的交叉編譯器/編譯器(如針對(duì)JavaScript應(yīng)用程序的Babel)
  • 以及全棧生成器(如Starter StackGen(tm))

REST API的數(shù)量激增,導(dǎo)致在過(guò)去十年中針對(duì)各種編程語(yǔ)言和環(huán)境開(kāi)發(fā)的API客戶端生成器種類繁多。

就像某種巨大的數(shù)字Turducken一樣,REST API及其生成的客戶端似乎能夠?qū)⑷魏问挛镞B接到任何事物。

因此,讓我們看一下代碼生成管理中涉及的火雞,鴨子和小雞……

1.代碼重寫(xiě)

自動(dòng)編碼的一種廣泛形式是代碼重寫(xiě)-用于將一種語(yǔ)言版本的語(yǔ)法轉(zhuǎn)換為另一種語(yǔ)言,有時(shí)甚至完全轉(zhuǎn)換為另一種語(yǔ)言。

例如,諸如Scala之類的語(yǔ)言實(shí)際上是將您的代碼重寫(xiě)為與Java兼容的代碼。

著名的奇怪的Lombok項(xiàng)目基本上在您鍵入時(shí)重寫(xiě)Java代碼,生成幻像方法,因此您可以專注于出色。

就像Babel一樣,任何優(yōu)秀的JavaScript開(kāi)發(fā)人員都可以證明“編譯器”是如何將您的高級(jí)ES2017重寫(xiě)為已使用了10年的,與瀏覽器兼容的舊版JavaScript,因此您可以編寫(xiě)現(xiàn)代代碼,而不必?fù)?dān)心瀏覽器的行為方式。

2.基于模板的生成

React生態(tài)系統(tǒng)在創(chuàng)建基于模板的應(yīng)用程序框架(包括React的“ create-react-app” CLI命令)方面特別活躍。

在整個(gè)軟件行業(yè)中,其他基于模板的代碼生成也很普遍。HTML模板和流行的新靜態(tài)站點(diǎn)生成器通常利用流行的胡須或車(chē)把模板引擎來(lái)利用模板解析。

在服務(wù)器模板引擎(例如Velocity)以及基于服務(wù)器的胡須和車(chē)把實(shí)現(xiàn)中,吐出了預(yù)渲染的源文件(例如HTML和越來(lái)越多的JavaScript)。

3.運(yùn)行時(shí)動(dòng)態(tài)代碼

模板并不是生成代碼的唯一方法。

通過(guò)自省,例如Java和Java Reflection API等語(yǔ)言以及Ruby Metaprogramming,運(yùn)行代碼可以是“自我感知”的,一旦您的代碼自我感知,構(gòu)建真正動(dòng)態(tài)應(yīng)用程序的選項(xiàng)就會(huì)真正擴(kuò)展。

在Starter,我們使用Java構(gòu)建了StackGen生成器引擎,這意味著我們能夠使用便捷的JavaPoet庫(kù)來(lái)動(dòng)態(tài)構(gòu)建Java類文件,其中包括在運(yùn)行時(shí)動(dòng)態(tài)合成的功能。有趣的是,這些類可以在內(nèi)存中編譯并由類加載器加載,而無(wú)需寫(xiě)入磁盤(pán)。

他們說(shuō)Java不是動(dòng)態(tài)語(yǔ)言!

這種類型的動(dòng)態(tài)生成的代碼令人興奮,因?yàn)樗粌H節(jié)省了我們手動(dòng)編寫(xiě)代碼的時(shí)間和金錢(qián),而且還提供了機(jī)會(huì)在運(yùn)行時(shí)在應(yīng)用程序中創(chuàng)建響應(yīng)行為,而無(wú)需人工干預(yù)(可能基于AI決策)使我們的應(yīng)用程序和數(shù)字體驗(yàn)比以往更具吸引力和實(shí)用性。

但是生成的代碼很爛!

不幸的是,軟件行業(yè)的歷史上充斥著代碼生成器,無(wú)代碼開(kāi)發(fā)工具,所見(jiàn)即所得前端生成器的示例,并被似乎從未消亡的古老平臺(tái)吐出的普遍的加密源代碼恐怖所困擾(我正在尋找在您的DreamWeaver Ultradev上還是應(yīng)該說(shuō)Drumbeat 2000 ??。?。

當(dāng)機(jī)器充滿了晦澀的技術(shù)和混亂的變量名時(shí),誰(shuí)想要處理機(jī)器吐出的代碼?生成的昔日代碼只是令人沮喪和悲傷,而您想要建立的任何東西都沒(méi)有。

幸運(yùn)的是,時(shí)代變了

在2019年,工具和軟件開(kāi)發(fā)的最佳實(shí)踐已經(jīng)發(fā)展到人類和機(jī)器可以真正在中間相遇的地步。諸如APIcur.io,StackGen和Microsoft PowerApps之類的代碼生成器經(jīng)過(guò)發(fā)展,可以克服過(guò)去的局限性,同時(shí)將所有代碼生成技術(shù)中的最佳功能結(jié)合到現(xiàn)代開(kāi)發(fā)工具中。

代碼生成的優(yōu)點(diǎn)

  • 無(wú)需手動(dòng)編碼=更少的錯(cuò)誤
  • 實(shí)現(xiàn)更大,更復(fù)雜的模式可能節(jié)省大量時(shí)間
  • 簡(jiǎn)單應(yīng)用和PoC的快速上市周期
  • 穩(wěn)定的基礎(chǔ)架構(gòu)意味著更少的時(shí)間浪費(fèi)
  • CI / CD友好,可以將代碼生成作為步驟添加到任何CI管道或開(kāi)發(fā)工作流程中
  • 端到端生成消除了處理多個(gè)源文件和文件類型時(shí)的錯(cuò)誤
  • 可以將新功能集成到基礎(chǔ)模板中,以在單個(gè)構(gòu)建中跨大型代碼庫(kù)實(shí)現(xiàn)
  • 但這并不是說(shuō)代碼生成沒(méi)有缺點(diǎn)。

代碼生成的缺點(diǎn)

  • 并非所有應(yīng)用程序都將從代碼生成中受益
  • 與手動(dòng)選擇每個(gè)代碼庫(kù),模式和編碼樣式相比,代碼生成更加不靈活
  • 對(duì)基礎(chǔ)模板的更改將推廣到所有生成的文件,因此更改必須高度兼容并經(jīng)過(guò)全面測(cè)試
  • 生成的代碼必須在代碼庫(kù)中與開(kāi)發(fā)人員代碼仔細(xì)隔離- 存在覆蓋開(kāi)發(fā)人員代碼的風(fēng)險(xiǎn),并且應(yīng)該可以在不影響任何現(xiàn)有代碼的情況下進(jìn)行重新生成
  • 代碼生成會(huì)增加一些復(fù)雜性-例如,要真正了解生成器并與之合作,您需要了解生成的代碼及其原因-除了代碼庫(kù)的常規(guī)問(wèn)題之外
  • 編寫(xiě)其他代碼的編寫(xiě)代碼的思維模式可能會(huì)變得松散,尤其是在編寫(xiě)生成其他應(yīng)用程序的應(yīng)用程序時(shí)

LCDP和將創(chuàng)新推向邊緣

LCDP(低代碼開(kāi)發(fā)平臺(tái))作為“無(wú)代碼開(kāi)發(fā)”的最新形式以及橋接高級(jí)用戶/ jr的新方法而受到關(guān)注。開(kāi)發(fā)者差距。

隨著對(duì)新功能和新系統(tǒng)需求的增長(zhǎng),開(kāi)發(fā)人員變得捉襟見(jiàn)肘,許多用戶被超載的Excel電子表格所束縛,或者由于各個(gè)級(jí)別的開(kāi)發(fā)人員資源稀缺而根本沒(méi)有所需的軟件功能。

消費(fèi)者SaaS解決方案可以完成許多一次性任務(wù),但是一堆雜亂無(wú)章的Web應(yīng)用程序和服務(wù)并不是滿足許多需求的可靠基礎(chǔ)。

另一方面,對(duì)于許多組織來(lái)說(shuō),昂貴的企業(yè)系統(tǒng)根本不是一個(gè)選擇。

除了節(jié)省開(kāi)發(fā)成本外,授權(quán)“公民開(kāi)發(fā)人員”在適當(dāng)時(shí)構(gòu)建自己的解決方案是LCDP價(jià)值主張的主要驅(qū)動(dòng)力。

代碼生成器直接位于解決方案域的中間。

使用OpenAPI和StackGen端到端生成

StackGen采用整體方法來(lái)生成代碼-基于OpenAPI / Swagger模式。

開(kāi)發(fā)從一開(kāi)始就開(kāi)始,重點(diǎn)是使用OpenAPI / Swagger設(shè)計(jì)出色的API 。

然后,該設(shè)計(jì)準(zhǔn)則使您可以生成具有可預(yù)測(cè)行為的健壯堆棧,并使用此處的任何自定義邏輯和前端設(shè)計(jì)對(duì)其進(jìn)行精確擴(kuò)展。

為了達(dá)到這種靈活性,StackGen使用了3種代碼生成步驟以及3種不同的實(shí)現(xiàn)方式。

系統(tǒng)的3個(gè)主要組件使用了多種生成技術(shù):Swagger CodeGen,MyBatis生成的DAO和映射,以及即將到來(lái)的StackGen PRO,ReactJS前端生成。

Swagger CodeGen和StackGen React代碼都使用Mustache從Mustache模板文件生成React內(nèi)容。

  • Mustache
  • JavaPoet
  • Swagger CodeGen
  • MyBatis Generator

這種方法的優(yōu)勢(shì)在于它是可插入的,并允許我們?cè)谶\(yùn)行時(shí)和編譯之前生成。

通過(guò)生成對(duì)開(kāi)發(fā)人員友好的格式的高質(zhì)量源代碼,現(xiàn)代代碼生成器在提供現(xiàn)代高度可擴(kuò)展且健壯的基準(zhǔn)代碼庫(kù)的同時(shí),使全棧開(kāi)發(fā)人員的效率倍增。

關(guān)于作者

約翰·麥克馬洪(John McMahon)是Starter Inc.的首席執(zhí)行官,該公司是Extentech Inc的創(chuàng)始人,并且多年來(lái)是StackGen,Sheetster,OpenXLS,ExtenXLS和眾多軟件項(xiàng)目的開(kāi)發(fā)商。

責(zé)任編輯:張燕妮 來(lái)源: 博客園
相關(guān)推薦

2012-07-11 10:51:37

編程

2013-03-22 16:43:03

可讀代碼代碼的藝術(shù)代碼編寫(xiě)

2024-02-20 21:49:29

AI前端代碼

2021-03-17 08:00:59

JS語(yǔ)言Javascript

2016-11-30 18:35:03

JavaScript

2012-12-17 13:51:22

Web前端JavaScriptJS

2021-04-25 11:31:45

React代碼整潔代碼的實(shí)踐

2015-11-05 09:07:12

代碼傻瓜式

2022-06-07 09:30:35

JavaScript變量名參數(shù)

2024-06-24 14:19:48

2020-09-21 05:57:11

代碼編程語(yǔ)言開(kāi)發(fā)

2024-02-23 08:00:00

2023-03-27 15:05:10

Python技巧

2012-04-27 16:54:57

Java代碼

2011-11-25 10:35:20

Java

2012-06-20 09:47:59

2020-08-27 07:00:00

代碼軟件應(yīng)用程序

2014-04-21 10:14:52

PromisesJavaScript

2014-04-25 09:02:17

LuaLua優(yōu)化Lua代碼

2013-04-15 09:02:43

JavaScriptJS
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)