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

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

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

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

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

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

第一期视频教程免费:https://www.bilibili.com/video/BV1ie411Q7AV

文末有加入项目学习的方式

项目介绍

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

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

完整项目分为 3 个阶段:

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

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

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

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

之所以要分为 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,我也开心哈哈:

需求分析

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

调研

网上有一些代码生成器项目,比如前端 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/#section=data-r21&test=composite

项目设计

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

代码生成器的核心原理

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

比如参数:

作者 = 鱼皮

模板文件代码:

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

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

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

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

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


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

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

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

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

业务流程

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

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

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

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

流程图如下:

实现思路

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 包。

流程图如下:

实现思路

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

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

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

关键问题

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

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

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

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

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

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

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

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

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

业务流程

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

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

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

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

完整业务流程图如下:

实现思路

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

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

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

关键问题

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

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

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

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

新建代码仓库

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

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

最后

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

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

新项目启动,限时发放大额优惠 🧧,名额有限!欢迎小伙伴们加入学习,快速提升项目实战能力 👏🏻

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/216345.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据挖掘与低代码开发应用:加速业务创新的黄金组合

数据挖掘与低代码开发是当今创新领域的两大热点技术。数据挖掘技术可以从大量数据中发现隐藏的模式和知识,为决策提供有力支持;而低代码开发则使得应用程序的开发变得更加快捷和高效。本文将介绍数据挖掘和低代码开发的概念及其应用,并阐述它…

无限移动的风景 css3 动画 鼠标移入暂停

<style>*{margin:0;padding:0;/* box-sizing: border-box; */}ul{list-style: none;}#nav{width:900px;height:100px;border:2px solid rgb(70, 69, 69);margin:100px auto; overflow: hidden;}#nav ul{animation:moving 5s linear infinite;width:200%; /*怎么模拟动画…

隐写2-MISC-bugku-解题步骤

——CTF解题专栏—— 声明&#xff1a;文章由作者weoptions学习或练习过程中的步骤及思路&#xff0c;非正式答案&#xff0c;仅供学习和参考。 题目信息&#xff1a; 题目&#xff1a;隐写2 作者&#xff1a;harry 提示&#xff1a;f1g{xxx} 解题附件&#xff1a; 解题思路…

年底了,项目预算怎么创建?9个步骤直接搞定

如果将项目比作一辆汽车&#xff0c;那么预算就是它的燃料。就像汽车需要汽油一样&#xff0c;项目也需要资金和资源来维持运转。而作为项目经理&#xff0c;应该尽量用最有效的方式规划和使用这些资源&#xff0c;使项目按时交付。 项目预算是一项计划&#xff0c;其中详细说…

软件测试常见并发问题有哪些?

1、前言 经常有人问&#xff0c;性能测试是不是就是并发测试&#xff1f;答案是否&#xff0c;性能测试和并发测试是两个概念&#xff0c;且并发测试不等同于性能测试。 今天我们就来详细讲讲什么是并发测试&#xff0c;以及解析实际的项目中常见的并发问题。 2、并发测试的…

SpringBoot集成i18n(多语言)

配置文件 spring: messages: basename: il8n/messages # 配置国际化资源文件路径 fallback-to-system-locale: true # 是否使用系统默认的语言环境作为备选项 国际化配置 import org.springframework.context.annotation.Bean; import org.spr…

赛事回顾 | 首届“智航杯“全国无人机智能算法竞赛落幕

11月28日&#xff0c;首届“智航杯”全国无人机智能算法竞赛实物赛在海南省三亚市成功落下帷幕。此次竞赛自2023年4月启动以来&#xff0c;共有来自全国145所高等院校和50多所企事业单位的1253支团队、3655人报名参赛&#xff0c;最终有6支队伍脱颖而出&#xff0c;入围了实物赛…

赴日程序员高年薪过上“躺平”生活?

日本的IT行业想要达到的高薪&#xff0c;也是需要很多资历和经验的&#xff0c;不过即使你是新卒&#xff0c;也能拿到相比国内来说让你满意的薪资。 刚入职的起薪是20-23万日元/月&#xff0c;情报信息业出身&#xff0c;技术掌握不错&#xff0c;起薪是25万-30万日元。之后经…

强化学习——简单解释

一、说明 最近 OpenAI 上关于 Q-star 的热议激起了我温习强化学习知识的兴趣。这是为强化学习 (RL) 新手提供的复习内容。 二、强化学习的定义 强化学习是人类和其他动物用来学习的学习类型。即&#xff0c;通过阅读房间来学习。&#xff08;从反馈中学习&#xff09;。让我解…

根据YOLOv5、v8、v7训练后生成的result文件用matplotlib进行绘图

1. 效果图 2. 认识result内容 2.1 YOLOv7的result.txt 参考链接&#xff1a;YOLOv7结果分析&#xff0c;txt文件内容 0/299 14.7G 0.07522 0.009375 0.02266 0.1073 58 640 0.0002958 0…

数据结构与算法(四)分治算法(Java)

目录 一、简介1.1 背景1.2 定义1.3 步骤1.4 时间复杂度 二、经典示例2.1 二分搜索2.2 快速排序2.3 归并排序&#xff08;逆序数&#xff09;2.4 最大子序列和 一、简介 1.1 背景 在学习分治算法之前&#xff0c;我们先来举一个例子。 假如你有一个存钱罐&#xff0c;过年家人…

【C++】开源:Boost进程间通信库InterProcess配置使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍Boost进程间通信库InterProcess配置使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一…

Java实现简单的王者荣耀游戏

一、创建新项目 首先创建一个新的项目&#xff0c;并命名为wangzherongyao。 其次在飞翔的鸟项目下创建一个名为img的文件夹用来存放游戏相关图片。详细如下图&#xff1a; 二、游戏代码 1、创建怪物类 1.bear&#xff1a; package beast;import wangzherogyao.GameFrame;…

听说这样寄快递会很省钱!速来收藏!便宜寄快递!

哈喽&#xff0c;小伙伴们&#xff0c;今天介绍一个寄快递省钱的小妙招。话不多说&#xff0c;小编直接开整&#xff01; 在闪侠惠递这个快递折扣平台下单送快递&#xff0c;不仅方便&#xff0c;而且运费更便宜。平台整合了京东、顺丰、圆通、申通、极兔、等快递公司可供选择…

Oracle 中换行chr(10)、回车chr(13)

一、前言 chr(n)&#xff1a;返回 ascii 值对应的字符。 ascii(char)&#xff1a;返回字符 char对应的ascii 值。 chr(n) 和 ascii(char) 作用刚好是相反的。 SQL> select chr(65) from dual; 控制台显示&#xff1a;ASQL> select ascii(A) from dual; 控制台显示&am…

最受好评的 Android 数据恢复软件工具

在本文中&#xff0c;您将找到适用于 Windows 的最佳 Android 数据恢复软件&#xff0c;以从 Android 恢复丢失或删除的文件。 Android 设备被广泛使用。但数据丢失在 Android 手机中也很常见。生活中&#xff0c;我们经常清理内存较小的安卓手机中的无效垃圾短信&#xff0c;…

Temu拼多多跨境电商,产品合规要求,需要的检测报告证书你了解多少?

Temu拼多多跨境电商&#xff0c;产品合规要求&#xff0c;需要的检测报告证书你了解多少&#xff1f;Temu 拼多多跨境电商 自拼多多Temu登录美国超级碗后&#xff0c;Temu已经超过亚马逊和沃尔玛&#xff0c;成为美国下载量最高的购物应用&#xff0c;Temu已然成为近期美国人民…

Netty网络编程

入门案例 1、服务器端代码 public class HelloServer {public static void main(String[] args) {// 1、启动器&#xff0c;负责装配netty组件&#xff0c;启动服务器new ServerBootstrap()// 2、创建 NioEventLoopGroup&#xff0c;可以简单理解为 线程池 Selector.group(n…

5. Jetson Orin Nano CUDA 配置

5. Jetson Orin Nano CUDA 配置 1&#xff1a;安装Jtop jtop安装主要有以下三个步骤&#xff1a; 安装pip3 我们需要使用pip3来安装jtop&#xff0c;所以先安装pip3 sudo apt install python3-pip安装jtop sudo -H pip3 install -U jetson-stats运行jtop服务 sudo -H pip3 in…