什么是脚手架?
脚手架是一种元编程方法,用于构建基于数据的应用。创建系统架构的程序员编写一份规格说明书,用于描述怎么去使用数据库。而脚手架可以根据这份规则说明书生成相应的框架代码。我们把这种模式称为脚手架,在脚手架上更高效的构建出 powerful
的应用!
说白了就是简化具有共性重复操作的简单工作,不再需要程序员还得一点点粘贴复制,克隆出一个已经存在的架构。只需要在界面或者公用接口上,传入必要的参数,就可以创建出一个应用开发框架。
针对Springboot初学者,我分享一套SpringBoot教程,通过这个视频的学习,可以全面掌握Spring Boot开发框架技术,并在实际项目开发中得心应手使用Spring Boot框架,提升自身的技术能力与价值。
在线观看:
急速开发框架SpringBoot 2.X版-springboot核心思想
资料免费下载:
前言
脚手架的目的是为了在统一的标准下快速建设系统框架,把系统开发过程中需要的配置、组件、服务、测试,一并通过配置引入到系统开发中。
但有些时候在互联网公司通用的脚手架是不太合适使用的,因为它没有把公司内的一些自研性质的组件引入进去,也不能很好的融合。如果已经用脚手架生成后还得需要研发人员自己大量复制进去一些特定的组件,就破坏了脚手架本身能力,也是破坏了准则和规范。
所以,需要结合脚手架的开发能力,包装各类特定组件、服务、配置,实现符合公司领域的统一脚手架。
那么,本文章就带着大家看看一个脚手架,该如何开发实现。其实并没有太复杂,我们可以使用 freemarker 的能力,构建系统框架。
一、工程框架
整个用于创建脚手架的工程并不复杂,主要就是通过 freemarker 对各类定义的 ftl 模板文件,生成对应的系统框架结构。这里包括:工程主体、框架结构、启动类、配置文件、测试类等,也可以结合自身需求把对应 ORM 的类和映射关系生成出来。
整个工程结构偏 DDD 层次结构,domain 领域中建设了所有的生成方式,resources/generator 定义生成模板,其他地方就没有太大的差异了。
接下来简单介绍下这个工程的代码,让大家可以理解这样的工程是如何开发的,也可以通过这样工程继续完善成自己需要的结构。
二、应用层定义生成类接口
cn.bugstack.initializr.rigger.application.IProjectGenerator.java
- DDD 的分层结构,通常都会在 application 这个比较薄的层定义接口,再有 domain 领域层做相应的实现。
- 这个接口的定义主要是为了,让外部调用方可以通过此接口创建工程框架。
三、FTL 模板定义
FreeMarker:
FreeMarker 是一款 模板引擎:即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
模板编写为FreeMarker Template Language (FTL)。它是简单的,专用的语言, 不是 像PHP那样成熟的编程语言。那就意味着要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,你可以专注于如何展现数据, 而在模板之外可以专注于要展示什么数据。
FreeMarker 在线手册:http://freemarker.foofun.cn
1 、application.ftl
2 、pom.ftl
3 、yml.ftl
以上,只是用于生成框架文件的基础 ftl 文件,有需要一些特殊判断和逻辑的,可以参考FreeMarker 在线手册,编写自己需要的 ftl 文件。
四、FTL 生成文件
cn.bugstack.initializr.rigger.domain.service.module.impl.GenerationApplication.java @Service public class GenerationApplication extends BaseModule { private Logger logger = LoggerFactory.getLogger(GenerationApplication.class); public void doGeneration(ProjectInfo projectInfo, String projectsRoot, String lastPackageName, StringBuffer applicationJavaName) throws Exception { ApplicationInfo applicationInfo = new ApplicationInfo( projectInfo.getGroupId() + "." + lastPackageName, applicationJavaName.toString() ); String packagePath = applicationInfo.getPackageName().replace(".", "/") + "/"; File file = new File(projectsRoot + projectInfo.getArtifactId() + "/src/main/java/" + packagePath, applicationInfo.getClassName() + ".java"); // 写入文件 super.writeFile(file, "application.ftl", applicationInfo); logger.info("创建主入口类 Application.java {}", file.getPath()); } }
- 关于 ftl 文件的使用,无论在用于生成那一层的文件,基本都是通用。这里只展示一下关于 Application.java 的创建。
- 主要包括了,定义入参
ApplicationInfo
、定义文件位置/src/main/java/
、以及写入到文件super.writeFile
,这三方面。
五、创建框架入口
cn.bugstack.initializr.rigger.domain.service.ProjectGeneratorImpl.java
ProjectGeneratorImpl
类,就是应用层接口 IProjectGenerator
在领域层的具体实现。这里包括了如下内容:
- 创建 Application.java
- 生成 application.yml
- 生成 pom.xml
- 创建测试类 ApiTest.java
- 生成 .gitignore
- DDD 四层描述文件
综上,就是整个脚手架生成的简要介绍,其实并没有多复杂,主要就是 ftl 文件的定义和使用,这种创建脚手架的方式还是很方便的。
六、测试验证
单元测试
测试结果
转载自作者:小傅哥
博客:https://bugstack.cn