首页 > 其他分享 >如何开发代码生成器平台?分享下思路

如何开发代码生成器平台?分享下思路

时间:2023-12-04 18:33:15浏览次数:33  
标签:代码生成 项目 代码 生成 思路 分享 制作 模板

大家好,我是鱼皮,我的新项目 《鱼籽 - 定制化代码生成项目》 系列教程正式开始!

本次项目依然是从 0 到 1 带大家开发,会遵循企业项目开发的标准流程:需求分析 => 技术选型 => 项目设计 => 项目初始化 => Demo 编写 => 前后端开发实现 => 测试验证 => 部署上线,带大家一步步完成整个项目。

本篇文章作为该项目的第一期教程,公开免费,给大家分享整个项目的介绍和背景、项目的技术选型、项目设计、业务流程、大致的实现思路和要解决的关键问题等,内容会比较轻松。

对于有能力的同学,学到了本文的思路,哪怕后面不跟着我的教程学习,应该也是能完成项目的,有一定的参考价值~

朋友们,准备开启新项目的学习之旅吧!


如何开发代码生成器平台?分享下思路_程序员

项目介绍

这次要带大家做的是一个非常有趣又实用的项目,基于 React + Spring Boot + Vert.x 响应式编程的 定制化代码生成项目

注意!这次的项目会很特别,听起来是一个项目,但其实是循序渐进的 3 个项目

如何开发代码生成器平台?分享下思路_互联网_02

完整项目分为 3 个阶段:

1)第一阶段,我会带大家制作属于自己的 本地代码生成器 ,是一个 基于命令行的脚手架 ,能够根据用户的交互式输入快速生成特定代码。

如何开发代码生成器平台?分享下思路_互联网_03

网上绝大多数的代码生成器教程,也只是讲到这个阶段。

2)第二阶段,让我们上升一个层次,带大家开发 制作代码生成器的工具 。比如你有一段常用的项目代码,使用该工具,可以快速把项目代码制作为代码生成器,将是提高工作效率的大杀器!

3)第三阶段,让我们再上升一个层次,带大家开发 在线代码生成器平台 !你可以在平台上制作发布自己的代码生成器,还可以在线使用别人的代码生成器,甚至可以共享协作!

如何开发代码生成器平台?分享下思路_计算机_04

之所以要分为 3 个阶段,一方面是因为项目是比较庞大的,拆分后学习会更轻松;另一方面是不同阶段的难度不同,大家可以根据自己的学习进度和时间独立学习。

比如即使你什么框架都没学过,也可以完成第一阶段;而如果你学过开发框架,可以完成第二阶段;如果你想学习更多高级知识和优化技巧,再去看第三阶段。够贴心吧~

项目背景

为什么要带大家做这个项目呢?

这也是一个需求分析的过程,我主要考虑的是:学习意义、解决的问题、实际应用三个方面。

学习意义

1)教程资料少:网上虽然有现成的项目模板,但基本都是别人封装好的,只能按作者的要求生成,并且缺少项目教程;而本项目不仅带大家做自己的代码生成器,还会 进 2 步 扩展,打造制作自定义代码生成器的工具和平台。

2)新颖且亮眼:别人写代码,而你做生产代码的脚手架、工具和平台来提高研发效能,降维打击。

3)能学到东西:不再是增删改查的项目,而是包含了大量的实际业务场景、系统设计和解决方案。

4)有区分度:区别于传统 Web 应用,项目涉及命令行应用、响应式编程、性能优化的入门及实战,给你的简历增加竞争力。

解决的问题

1)代码生成器本身的作用就是自动生成常见、重复性的代码片段,解决重复编码、效率低下的问题

2)虽然网上有很多代码生成器,但都是别人制作封装好的,很多时候还是 无法满足实际开发的定制化需求 (比如要在每个类上增加特定的注解和注释)。这也是为什么明明有代码生成器,很多开发者还是会抱怨自己的工作总是复制粘贴、编写重复的代码、天天 CRUD(增删改查)。如果能够有一个工具帮助开发者快速定制属于自己的代码生成器,那么将进一步提高开发效率。

3)在团队开发中,要生成的代码可能是需要频繁变化和持续更新维护的。如果有一个线上平台来维护多个不同的代码生成器,支持在线编辑和共享生成器,在提高开发效率的同时、将有利于协作共建,打造更高质量的代码生成器。

实际应用

举例一些代码生成的实际应用场景,我们将通过本项目进行解决:

1)经常做算法题目的同学,可能需要一套 Java ACM 代码输入模板,能够支持多种不同输入模式(比如单次读取和循环)。

2)经常开发新项目的同学,可能需要一套初始化项目模板代码,比如一键生成 Controller 层代码(替换其中的对象)、整合 Redis 和 MySQL 依赖等。

3)甚至可以制作项目 “换皮” 工具,支持一键给网络热门项目换皮(比如替换项目的名称、Logo 等)

项目特点

本次项目,会和之前的 鱼皮原创项目教程系列 一样,鱼皮依然会 从 0 到 1 全程直播无剪辑 地带大家开发完成项目,需求分析 => 技术选型 => 项目设计 => 项目初始化 => Demo 编写 => 前后端开发实现等,每个环节我都 从理论到实践 给大家讲的明明白白、每个细节都不放过!

鱼皮的实战项目系列还会提供以下服务:

  • 详细的直播笔记
  • 完整的项目源码
  • 答疑解惑
  • 专属项目交流群
  • ⭐️ 现成的简历写法(直接写满简历)
  • ⭐️ 项目的扩展思路(拉开和其他人的差距)
  • ⭐️ 项目相关面试题、题解和真实面经(提前准备,面试不懵逼)
  • ⭐️ Java 后端万用项目模板(快速创建项目)

而且这次的新项目,鱼皮会尝试一种新的模式:

1)代码全部开源:开源最大的好处是协作共建。一方面让项目持续发展、获取更多扩展点给大家学习参考;另一方面所有学完项目的同学都能参与项目共建、成为项目贡献者给简历加分,星球鱼友们在贡献代码时可以和大家交流,并且更容易参与贡献,我们争取一起做个很牛的项目!

从 0 开始跟学 1 个开源项目,然后直接成为贡献者,这绝对是一个非常刺激的体验~

2)讲解方式升级:会在原有直播带做项目的基础上,额外编写一套 文字教程 。兼容喜欢看文章学习的同学,并且便于大家复习~

虽然这种方式要花比原来多至少 1 倍的时间,但我还是希望能给大家更好的学习体验,毕竟看着大家拿到 offer,我也开心哈哈:

如何开发代码生成器平台?分享下思路_计算机_05

需求分析

其实上面已经带大家了解了项目的基本信息、项目的意义和价值。在需求分析阶段,我们通常还要进行一些调研工作,帮助我们明确需求、为后面的设计做好充分的准备。

调研

网上有一些代码生成器项目,比如前端 Ant Design Pro 中后台项目脚手架,能够让用户交互式地创建指定的项目;还有后端 MyBatis X 插件,能够让用户通过界面来创建 CRUD 重复代码。但这些项目都是开发者提前制作好了代码生成器,然后让你 根据他们设置好的规则 生成代码(或者拉取特定位置的代码),生成后的代码通常还要再自己二次修改,不够灵活。

还有很多所谓的代码生成项目,其实本质上是一个现成的项目模板,让你通过编写对应的配置文件来使用项目,或者还是基于预设的程序来生成特定代码。比如 编程导航知识星球 的 Spring Boot 万用项目模板,或者网上很多知名的开源管理系统。

这和我们要做的事情不同,我们的目标是升级一个层次!打造一个帮助大家快速制作代码生成器的工具,也就是 “造轮子的轮子”。

然后再升级一个层次!允许用户像发布应用一样,在平台上发布和管理代码生成器,便于共享和协作!

技术选型

暂定的核心技术如下,实际开发中还会引入新技术

前端

  • React 开发框架 + 组件库 + 代码编辑器
  • 前端工程化:ESLint + Prettier + TypeScript

后端

  • Java Spring Boot + MySQL + MyBatis Plus(万用后端模板)
  • Java 命令行应用开发
  • FreeMarker 模板引擎
  • Vert.x 响应式编程
  • Caffeine + Redis 多级缓存
  • 分布式任务调度系统
  • 多种设计模式
  • 多种系统设计的巧思
  • 对象存储

学习重点

其中:Java 命令行应用开发、FreeMarker 模板引擎、Vert.x 响应式编程、设计模式、系统设计的巧思、分布式任务调度系统都是本项目的学习重点,也是校招简历上很少有同学提到的知识实践,学完后能够大大增加简历的区分度!

比如 Vert.x 框架,并发连接处理能力吊打 Spring 几条街!

Web Framework Benchmarks 性能对比网站:https://www.techempower.com/benchmarks/#sectinotallow=data-r21&test=composite

如何开发代码生成器平台?分享下思路_编程_06

如何开发代码生成器平台?分享下思路_互联网_07

项目设计

首先我们要理解代码生成的核心原理。

代码生成器的核心原理

一句话:参数 + 模板文件 = 生成的完整代码

比如参数:

作者 = 鱼皮

模板文件代码:

-----------
我是 ${作者}
-----------

将参数注入到模板文件中,得到生成的完整代码:

-----------
我是 鱼皮
-----------

如果想要使用这套模板生成其他的代码,只需要改变参数的值即可,而不需要改变模板文件。

理解了代码生成器的核心原理后,就可以开始思考项目的设计实现方案了。


项目总共分为 3 个阶段,让我们分别来进行设计。

第一阶段 - 本地代码生成器

这个阶段,我们的目标是做一个本地(离线)的代码生成器,实现一个简易的 Java ACM 模板项目的定制化生成。

本阶段不依赖复杂的开发框架,没学过任何开发框架也能学习。

业务流程

1)准备用于制作代码生成器的原始代码(比如 Java ACM 模板项目),用于后续生成

2)开发者基于原始代码,设置参数、编写动态模板

3)制作可交互的命令行工具,支持用户输入参数,得到代码生成器 jar 包

4)使用者得到代码生成器 jar 包,执行程序并输入参数,从而生成完整代码

流程图如下:

如何开发代码生成器平台?分享下思路_程序员_08

实现思路

1)先根据本地项目,扫描文件树,实现同样的静态代码生成

2)根据本地的项目,预设部分动态参数、编写模板文件,能够传入配置对象进行生成

3)制作可交互的命令行工具,接受用户输入的参数,并动态生成代码

4)封装制作代码生成器 jar 包文件,并简化使用命令

关键问题

1)如何根据一套项目文件,完整地生成同样一套项目?

2)如何编写动态模板文件?怎么根据模板和参数生成代码?

3)如何制作命令行工具?如何交互式接受用户的输入?

4)怎么将命令行工具制作为 jar 包?怎么简化使用命令?

第二阶段 - 代码生成器制作工具

这个阶段,我们的目标是做一个本地的代码生成器制作工具,能够快速将一个项目制作为可以动态定制部分内容的代码生成器。并且以一个 Spring Boot 初始化项目模板(Maven 项目)为例,演示如何根据自己的需要动态生成 Java 后端初始化项目。

本阶段的学习需要一定的 Spring Boot 开发知识,最好先完成 星球的其他项目 ,推荐用户中心和聚合搜索。

业务流程

1)准备用于制作代码生成器的原始代码(比如 Spring Boot 项目模板),用于后续生成

2)开发者基于原始代码,使用代码生成器制作工具,来快速设置参数、生成动态模板

3)使用代码生成器制作工具,动态生成代码生成器 jar 包

4)使用者得到代码生成器 jar 包,执行程序并输入参数,从而生成完整代码

相比第一阶段的业务流程,本阶段完成后,可以直接使用代码生成器制作工具来快速将固定的项目代码改造为可定制生成的动态模板,并自动生成命令行工具 jar 包。

流程图如下:

如何开发代码生成器平台?分享下思路_互联网_09

实现思路

1)使用独立空间来存储管理要生成的原始文件、动态模板文件等

2)使用配置文件来记录要生成的参数和模板文件信息、自定义配置等 元信息

3)代码生成器制作工具需要有多种可单独或组合使用的功能,比如从原始文件中抽取参数、动态生成命令行工具、打 jar 包等

关键问题

1)如何使用配置文件来记录参数和模板文件信息?何种结构?

2)怎么能够提高代码生成器的制作效率?工具应该提供哪些能力?

3)如何从原始文件中抽取参数?有哪些类型的参数?有哪些抽取规则?比如布尔类型参数(是否生成)、字符串类型参数(生成指定的值)等

如何开发代码生成器平台?分享下思路_程序员_10

4)如何动态生成配置类?如何动态生成命令行工具?如何动态打 jar 包?

第三阶段 - 在线代码生成器平台

经过前两个阶段,我们已经能够使用本地的代码生成器制作工具来快速定制自己的代码生成器了。

但如果我们想和团队其他同学共同维护代码生成器、或者使用其他人的代码生成器,通过本地文件互传的方式肯定就很麻烦了。

所以本阶段我们要打造一个在线代码生成器平台,可以理解为代码生成器的 应用市场。所有人都能发布、使用、甚至是在线制作自己的代码生成器!

本阶段我们的终极目标是,在平台上制作和发布项目 “换皮” 工具,帮助小伙伴们一键给网络热门项目换皮!

如何开发代码生成器平台?分享下思路_编程_11

业务流程

1)获取用于制作代码生成器的原始代码(手动准备或者远程拉取代码)

2)开发者基于原始代码,使用 在线代码生成器制作工具,来快速制作代码生成器

3)开发者发布代码生成器至平台

4)使用者在平台上搜索代码生成器,支持在线使用或者下载离线 jar 包(甚至还可以支持接口调用)

完整业务流程图如下:

如何开发代码生成器平台?分享下思路_编程_12

实现思路

1)使用 Web 开发框架实现代码生成器信息的增删改查

2)将本地的配置和文件 上云,存储到数据库、对象存储等云服务。

3)通过可视化界面来操作第二阶段的代码生成器制作工具,复用阶段二的成果。

关键问题

1)怎么在云上存储管理代码生成器?

2)如何通过前端开发,提高代码生成器的制作效率?

3)如何通过后端优化,提高代码生成器的制作性能?

4)如何保证代码生成器的存储空间不超限、如何优化存储?

新建代码仓库

先搭建个代码仓库,激励一下自己。

鱼皮新建的官方代码仓库:https://github.com/liyupi/yuzi-generator ,点 star 的都是精神股东~

最后

以上就是本期教程,相信大家看了上面的设计思路和关键问题后,已经对这个项目充满期待、迫不及待地想要解决这些问题了吧~

那就做好准备,让我们打起百分百的精神开启正式的项目学习~ 上面的问题,鱼皮都会一一带着大家解决!

标签:代码生成,项目,代码,生成,思路,分享,制作,模板
From: https://blog.51cto.com/u_15016006/8680618

相关文章

  • 从HumanEval到CoderEval: 你的代码生成模型真的work吗?
    本文分享自华为云社区《从HumanEval到CoderEval:你的代码生成模型真的work吗?》,作者:华为云PaaS服务小智。本文主要介绍了一个名为CoderEval的代码生成大模型评估基准,并对三个代码生成模型(CodeGen、PanGu-Coder和ChatGPT)在该基准上的表现进行了评估和比较。研究人员从真实的开源......
  • Excel实用工具分享
               大家好,相信大家在工作学习中都会用到Excel这个工具,虽然很方便,但是呢,小编想说的是,没有最方便只有最方便,接下来小编就分享一些,平时小编使用过的一些公式,在表格里面就可以直接使用哦! 1    谷歌翻译            =GoogleTranslateBy......
  • 实用功能分享,弹窗展示形式的6位卡号输入功能实现【玩转业务功能】
    前言本篇主要分享如何实现一个弹窗展示形式的6位卡号输入功能。6位卡号输入前面是根据卡的不同状态的流程实现,接下来,讲讲卡号输入的交互实现。卡号输入UIUI的呈现,会影响前端的实现方式。这里UI设计成弹出层的方式,每个数字都是一个方框。开发前在开发前,我列了一些可能出现的问题......
  • 新建模块&新建用户表&修改代码生成器文件&新建菜单
    1.新建模块打开IDEA在项目结构中新建rome-hotel的一个springboot项目,什么依赖都不需要 在pom.xml文件中修改坐标,引用父坐标 在父级pom文件中将模块加入 在rome-admin中的pom文件中加入admin-hotel,这样就能带动这个模块启动 将包名修改成和rome-admin一样 再创建其......
  • 数据分享|python分类预测职员离职:逻辑回归、梯度提升、随机森林、XGB、CatBoost、LGB
    全文链接:https://tecdat.cn/?p=34434原文出处:拓端数据部落公众号分析师:ShilinChen离职率是企业保留人才能力的体现。分析预测职员是否有离职趋向有利于企业的人才管理,提升组织职员的心理健康,从而更有利于企业未来的发展。解决方案任务/目标采用分类这一方法构建6种模型对职......
  • 分享一个LCD驱动框架
    首先需要说明的是本篇文章不是关于如何点亮一块LCD屏的教程,而是介绍一个LCD开发框架,更准确的说是介绍一个LCD的中间件(Middlwware),用来连接UI和不同类型的LCD屏。笔者本人的工作内容中很重要的一部分就是在不同的LCD屏上做UI开发,所以对如何最大程度复用LCD代码以及解耦屏驱有着一定......
  • Facebook营销的社群运营技巧与经验分享
    Facebook营销的社群运营技巧与经验分享 导语:在当今数字化的时代,Facebook已成为了一种广泛使用的社交媒体平台。对于企业而言,利用Facebook进行营销和社群运营是一种重要的策略。本文将分享一些关于Facebook营销的社群运营技巧和经验,希望能够帮助您提升品牌影响力,吸引更多目标受......
  • 云原生技术分享 (二)
    三、Kubernetes  Kubernetes源于希腊语,意为“舵手”。k8s缩写是因为k和s之间有八个字符的原因。它是google在2015开源的容器调度编排的平台。它是建立在Google大规模运行生产工作负载(Borg系统)十几年经验的基础上,结合了社区中最优秀的想法和实践,已经成为了目前容器编排的事......
  • SAP ABAP 里如何高效找到修改某个数据库表字段的 ABAP 程序的三种思路介绍试读版
    我的知识星球里,有朋友提问:公司的SAP中,总部开发了一个功能去更新采购订单行上的收货地址字段EKPO-ADRN2,我尝试着去Debug,但找不到最终是哪段程序更新了这一个字段。SAT也用了,也发现不了。不过我对SAT也不熟。有什么思路可以快速Debug找到那段更新程序不?其实这种需......
  • 关于企业级 Web 应用搜索引擎优化(Search Engine Optimization)的一些工作经验分享
    笔者之前的社区文章,分享了自己在日常工作中从事企业级Web应用开发的一些工作体会:企业级Web应用里使用CSS调整应用外观的一些例子谈谈企业级Angular应用的二次开发-基于AngularComponent替换的Extensibility支持案例介绍所谓企业级前端应用,是指为大型企业或组......