找回密码
 立即注册
首页 业界区 业界 如何做一个纯净版的ABP vNext 脚手架

如何做一个纯净版的ABP vNext 脚手架

里豳朝 2025-9-28 18:02:09
大家好,我是张飞洪,专注.NET开发十来年。感谢您的阅读,我会不定期分享我的学习心得和职场经验,希望我的文章能成为你成长路上的助力。让我们一起精进,共同进步。
视频
今天想和分享的是如何基于一套自定义的模版,用来快速搭建项目的脚手架。
1.各种搭建方式

我们知道ABP 有提供了自己的脚手架搭建方式,有很多种方式,比如像下面这种操作:
1.1命令行


  • 创建控制台项目
  1. abp new Tota.Microservices -t console -o Tota.Microservices -v 9.3.0
复制代码

  • 创建Module模板项目(Mysql+无界面)
  1. 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项目
  1. 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.png

1.3官网

还有一种,就是你到官网配置并下载
2.png

1.4其他

当然,还有其他方式,比如基于老项目进行复制,采用abp studio进行创建等等
2.自定义搭建

以上搭建方式十分方便,但是我想实现的是结合公司自己的规范,希望脚手架能够包含更多自己的最佳实践,比如:
2.1每个类都有完整的注释
  1. /// <summary>
  2. /// 数据集应用服务
  3. /// <para>版 权:蓝略数字科技有限公司(https://www.lanlue.cn)</para>
  4. /// <para>作 者:张飞洪</para>
  5. /// </summary>
  6. public class DataSetAppService : ApplicationService, IDataSetAppService
复制代码
2.2给每个接口增加注释
  1. private static void ConfigureSwaggerServices(ServiceConfigurationContext context, IConfiguration configuration)
  2. {
  3.     context.Services.AddAbpSwaggerGenWithOAuth(
  4.         configuration["AuthServer:Authority"]!,
  5.         new Dictionary<string, string>
  6.         {
  7.                 {"DataIntegration", "DataIntegration API"}
  8.         },
  9.         options =>
  10.         {
  11.             options.SwaggerDoc("v1", new OpenApiInfo { Title = "DataIntegration API", Version = "v1" });
  12.             options.DocInclusionPredicate((docName, description) => true);
  13.             options.CustomSchemaIds(type => type.FullName);
  14.             // 引入 XML 注释文件
  15.             var xmlContractFile = $"Tota.DataIntegration.Application.Contracts.xml";
  16.             var xmlHttpApiFile = $"Tota.DataIntegration.HttpApi.xml";
  17.             if (File.Exists(Path.Combine(AppContext.BaseDirectory, xmlContractFile)))
  18.                 options.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, "Tota.DataIntegration.Application.Contracts.xml"));
  19.             if (File.Exists(Path.Combine(AppContext.BaseDirectory, xmlHttpApiFile)))
  20.                 options.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, "Tota.DataIntegration.HttpApi.xml"));
  21.         });
  22. }
复制代码
2.3 给每个接口一个默认模版,比如像下面这样
  1. /// <summary>
  2. /// 创建连接器
  3. /// </summary>
  4. /// <param name="input">创建连接器入参</param>
  5. /// <returns>创建后的连接器</returns>
  6. [HttpPost]
  7. public async Task<ConnectorOutput> CreateAsync([FromBody] CreateConnectorOutput input)
  8. {
  9.     return await _connectorAppService.CreateAsync(input);
  10. }
复制代码
当然还有很多可能你想要预先内置的规范,这里不一一罗列了,重点来了,这里要怎么实现呢?
3.如何实现

3.1 准备模版项目

这个工作还是不可避免的,因为没有人知道你的规范是什么,我这里简单介绍一下我们公司自己的规范,因为规范很多,下面截图只是冰山一角。
比如 DDD 每层的规约:
3.png

又比如,DTO 内部的规约:
4.png

这些规约是一个公司十分重要的规范,但是你如果只是让新人看文档,可能不是很有感觉,如果这些规范能内置到脚手架里面,那就太好了。
3.2 采用生成工具


  • 把我的模版项目和工具拷贝到你的目录下,比如叫 src目录:
    5.png

  • 输入配置参数
    6.png

这个时候,下面会多出一个项目文件
7.png


  • 打开并运行项目
新生成项目目录
8.png

9.png

对比模版项目目录
10.png

关于生成小工具,也放在我的知识星球当中:
11.jpeg
  

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册