当前位置: 首页 > 科技观察

能写代码的代码:代码生成的优缺点

时间:2023-03-20 13:04:31 科技观察

代码生成的现状代码生成的现状无处不在(2019年春季)。如今,代码生成发生在软件堆栈的每一层,包括Java库(如swaggerCodeGen)、最新的交叉编译器/编译器(如BabelforJavaScript应用程序)以及全堆栈生成器(如StarterStackGen(tm))RESTAPI的激增导致在过去十年中为各种编程语言和环境开发了各种各样的API客户端生成器。就像某种巨大的数字三叶草一样,RESTAPI及其生成的客户端似乎能够将任何事物连接到任何事物。那么让我们来看看代码生成管理中涉及的火鸡、鸭子和鸡……1.代码重写自动编码的一种广义形式是代码重写——用于将一种语言版本的语法转换为另一种语言,有时甚至完全转换成另一种语言。例如,像Scala这样的语言本质上是重写你的代码以与Java兼容。以怪异着称的ProjectLombok基本上是在您键入时重写Java代码,生成幻象方法,因此您可以专注于表现出色。就像Babel一样,任何优秀的JavaScript开发人员都可以证明“编译器”如何将你的高级ES2017重写为10年前的、浏览器兼容的遗留JavaScript,这样你就可以编写现代代码,而不用担心浏览器如何表现。2.基于模板的生成React生态系统在创建基于模板的应用程序框架方面特别活跃,包括React的“create-react-app”CLI命令。其他基于模板的代码生成在整个软件行业中也很常见。HTML模板和流行的新静态站点生成器通常使用流行的Mustache或Handlebar模板引擎来利用模板解析。在像Velocity这样的服务器模板引擎中,基于服务器的mustache和handlebars实现吐出预渲染的源文件(如HTML和越来越多的JavaScript)。3.运行时动态代码模板不是生成代码的唯一方式。通过内省,像Java和JavaReflectionAPI以及Ruby元编程这样的语言,运行的代码可以是“自我意识的”,一旦你的代码是自我意识的,构建真正动态应用程序的选项就会真正扩展。在Starter,我们用Java构建了StackGen生成器引擎,这意味着我们能够使用方便的JavaPoet库来动态构建Java类文件,包括在运行时动态合成它们的能力。有趣的是,这些类可以在内存中编译并由类加载器加载,而无需写入磁盘。他们说Java不是动态语言!这种动态生成的代码令人兴奋,因为它不仅节省了我们手动编写代码的时间和金钱,而且还提供了在运行时在应用程序中创建响应行为而无需人工干预(可能基于AI决策)的机会,使我们的应用程序和数字体验比以往任何时候都更具吸引力和实用性。但是生成的代码很糟糕!不幸的是,软件行业的历史充斥着代码生成器、无代码开发工具、所见即所得前端生成器的例子,并被似乎永远不会消亡的古老平台吐出的加密源代码的普遍恐惧所困扰(我我正在查看您的DreamWeaverUltradev还是我应该说Drumbeat2000?!)。当机器吐出的代码充满晦涩难懂的技术和令人困惑的变量名时,谁愿意处理它呢?昔日的生成代码只是令人沮丧和悲伤,你想要构建的任何东西都没有丢失。幸运的是,时代变了。2019年,软件开发中的工具和最佳实践已经发展到人类和机器可以真正在中间相遇的地步。APIcur.io、StackGen和MicrosoftPowerApps等代码生成器不断发展以克服过去的局限性,同时将所有代码生成技术中最好的技术结合到现代开发工具中。代码生成的优势无需手动编码=错误更少实施更大、更复杂的模式可能节省大量时间简单应用程序和PoC的快速上市时间稳定的基础架构意味着更少的时间浪费CI/CD友好,可以推出将代码生成作为一个步骤添加到任何CI管道或开发工作流中端到端构建消除了处理多个源文件和文件类型时的错误新功能可以集成到基本模板中以在单个构建中跨越大型代码库这并不意味着代码生成没有缺点。代码生成的缺点并非所有应用程序都能从代码生成中受益代码生成不如手动选择每个代码库、模式和编码风格灵活对基本模板的更改将传播到所有生成的文件,因此更改必须高度兼容并经过全面测试生成代码必须与代码库中的开发人员代码仔细隔离——存在覆盖开发人员代码的风险,并且应该可以在不影响任何现有代码的情况下重新生成代码生成增加了一些复杂性——例如,要真正理解和使用生成器你需要了解生成的代码及其原因——除了代码库的一般问题之外,编写代码的心态可能会变得松散,尤其是LCDP和将创新推向边缘LCDP(低代码开发平台)作为最新形式的“无需代码开发”和一种连接高级用户/jr的新方法。开发商的差距。随着对新功能和系统的需求增长,开发人员捉襟见肘,许多用户被困在超载的Excel电子表格中,或者由于各级开发人员资源稀缺而根本没有他们需要的软件功能。消费者SaaS解决方案可以完成许多一次性任务,但一组杂乱无章的Web应用程序和服务并不是满足许多需求的可靠基础。另一方面,对于许多组织而言,昂贵的企业系统根本不是一种选择。除了节省开发成本之外,授权“公民开发者”在适当的时候构建自己的解决方案是LCDP价值主张的关键驱动力。代码生成器直接位于解决方案域的中间。使用OpenAPI和StackGen进行端到端生成StackGen采用整体方法生成代码-基于OpenAPI/Swagger模式。开发从一开始就着重于使用OpenAPI/Swagger设计出色的API。然后,此设计指南允许您生成具有可预测行为的稳健堆栈,并使用此处的任何自定义逻辑和前端设计对其进行精确扩展。为了实现这种灵活性,StackGen使用3个代码生成步骤和3个不同的实现。该系统的3个主要组件使用了多种生成技术:SwaggerCodeGen、MyBatis生成的DAO和映射,以及即将推出的StackGenPRO、ReactJS前端生成。SwaggerCodeGen和StackGenReactCode都使用Mustache从Mustache模板文件生成React内容。MustacheJavaPoetSwaggerCodeGenMyBatisGenerator这种方式的优点是它是可插拔的,允许我们在运行时和编译前生成。通过以开发人员友好的格式生成高质量的源代码,ModernCodeGenerator使全栈开发人员的工作效率提高一倍,同时提供现代的、高度可扩展的和强大的基线代码库。关于作者JohnMcMahon是StarterInc.的首席执行官,ExtentechInc.的创始人,多年来是StackGen、Sheetster、OpenXLS、ExtenXLS和众多软件项目的开发者。