大家好,我是张飞洪,专注.NET开发十来年。感谢您的阅读,我会不定期分享我的学习心得和职场经验,希望我的文章能成为你成长路上的助力。让我们一起精进,共同进步。
今天想和分享的是如何基于一套自定义的模版,用来快速搭建项目的脚手架。
1.各种搭建方式
我们知道ABP 有提供了自己的脚手架搭建方式,有很多种方式,比如像下面这种操作:
1.1命令行
-
创建控制台项目
abp new Tota.Microservices -t console -o Tota.Microservices -v 9.3.0
-
创建Module模板项目(Mysql+无界面)
abp new Tota.Gdpr -t module --no-ui --dbms mysql -cs "Server=192.168.11.11;Port=3306;Database=JackfeiDb;Uid=root;Pwd=JackfeiDb;" -v 9.3.0
-
创建WebApi项目
abp new Tota.File --no-ui -dbms mysql -cs "Server=192.168.11.11;Port=3306;Database=JackfeiDb;Uid=root;Pwd=JackfeiDb;" --separate-auth-server -v 9.3.0
1.2第三方工具
你也可以采用第三方工具,比如AbpHelper来快速搭建,比如下面这种操作:
1.3官网
还有一种,就是你到官网配置并下载

1.4其他
当然,还有其他方式,比如基于老项目进行复制,采用abp studio进行创建等等
2.自定义搭建
以上搭建方式十分方便,但是我想实现的是结合公司自己的规范,希望脚手架能够包含更多自己的最佳实践,比如:
2.1每个类都有完整的注释
/// <summary>
/// 数据集应用服务
/// <para>版 权:蓝略数字科技有限公司(https://www.lanlue.cn)</para>
/// <para>作 者:张飞洪</para>
/// </summary>
public class DataSetAppService : ApplicationService, IDataSetAppService
2.2给每个接口增加注释
private static void ConfigureSwaggerServices(ServiceConfigurationContext context, IConfiguration configuration)
{
context.Services.AddAbpSwaggerGenWithOAuth(
configuration["AuthServer:Authority"]!,
new Dictionary<string, string>
{
{"DataIntegration", "DataIntegration API"}
},
options =>
{
options.SwaggerDoc("v1", new OpenApiInfo { Title = "DataIntegration API", Version = "v1" });
options.DocInclusionPredicate((docName, description) => true);
options.CustomSchemaIds(type => type.FullName);
// 引入 XML 注释文件
var xmlContractFile = $"Tota.DataIntegration.Application.Contracts.xml";
var xmlHttpApiFile = $"Tota.DataIntegration.HttpApi.xml";
if (File.Exists(Path.Combine(AppContext.BaseDirectory, xmlContractFile)))
options.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, "Tota.DataIntegration.Application.Contracts.xml"));
if (File.Exists(Path.Combine(AppContext.BaseDirectory, xmlHttpApiFile)))
options.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, "Tota.DataIntegration.HttpApi.xml"));
});
}
2.3 给每个接口一个默认模版,比如像下面这样
/// <summary>
/// 创建连接器
/// </summary>
/// <param name="input">创建连接器入参</param>
/// <returns>创建后的连接器</returns>
[HttpPost]
public async Task<ConnectorOutput> CreateAsync([FromBody] CreateConnectorOutput input)
{
return await _connectorAppService.CreateAsync(input);
}
当然还有很多可能你想要预先内置的规范,这里不一一罗列了,重点来了,这里要怎么实现呢?
关于我们公司的规范和脚手架,统一放在我的知识星球当中:
3.如何实现
3.1 准备模版项目
这个工作还是不可避免的,因为没有人知道你的规范是什么,我这里简单介绍一下我们公司自己的规范,因为规范很多,下面截图只是冰山一角。
比如 DDD 每层的规约:
又比如,DTO 内部的规约:
这些规约是一个公司十分重要的规范,但是你如果只是让新人看文档,可能不是很有感觉,如果这些规范能内置到脚手架里面,那就太好了。
3.2 采用生成工具
-
把我的模版项目和工具拷贝到你的目录下,比如叫 src目录:
-
输入配置参数
这个时候,下面会多出一个项目文件
- 打开并运行项目
新生成项目目录
对比模版项目目录
关于生成小工具,也放在我的知识星球当中: