如何做一个纯净版的ABP vNext 脚手架
大家好,我是张飞洪,专注.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目录:

输入配置参数

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

- 打开并运行项目
新生成项目目录


对比模版项目目录

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

如何做一个纯净版的ABP vNext 脚手架的更多相关文章
- 使用DB4o做一个.Net版的website(一)环境
一个机缘巧合之下,知道了DB4o这个数据库引擎,下载查看之后,被其方便.高效.以及便捷的管理方式锁折服. 故决定使用其做一个.NET版本的web站点,来巩固学到的知识,以及为后来人做一点点贡献. 首先 ...
- 心愿:做一个精简版MFC
我觉得自己有能力看懂MFC的C++代码和总体流程,但是由于MFC混杂了太多的东西,比如OLE等等不必要的东西,又做了无数的ASSERT判断,影响整体流程的理解.因此我要做一个精简版的MFC,而且能用它 ...
- ABP VNext框架基础知识介绍(1)--框架基础类继承关系
在我较早的时候,就开始研究和介绍ABP框架,ABP框架相对一些其他的框架,它整合了很多.net core的新技术和相关应用场景,虽然最早开始ABP框架是基于.net framework,后来也全部转向 ...
- ABP VNext框架基础知识介绍(2)--微服务的网关
ABP VNext框架如果不考虑在微服务上的应用,也就是开发单体应用解决方案,虽然也是模块化开发,但其集成使用的难度会降低一个层级,不过ABP VNext和ABP框架一样,基础内容都会设计很多内容,如 ...
- abp vnext 开发快速入门 1 认识框架
最近在做一个项目,用的框架是Abp vnext ,不是Abp, 我自己也是刚开始用这个框架来做项目,难免要查资料,这个框架官方有中文文档,可以到官网www.abp.io 去查看,国内也有一些写了相关的 ...
- 使用Abp vnext构建基于Duende.IdentityServer的统一授权中心(一)
原来看到很多示例都是基于IdentityServer4的统一授权中心,但是IdentityServer4维护到2022年就不再进行更新维护了,所以我选择了它的升级版Duende.IdentitySer ...
- 分享一个基于Abp Vnext开发的API网关项目
这个项目起源于去年公司相要尝试用微服务构建项目,在网关的技术选型中,我们原本确认了ApiSix 网关,如果需要写网关插件需要基于Lua脚本去写,我和另外一个同事当时基于这个写了一个简单的插件,但是开发 ...
- [ZZ] 景深效果(Depth of Field) , Pass1 将场景渲染到一个RenderTarget,做为清晰版, Pass2: BluredRT , Pass3: WDepth = Depth / Far_Z_Clip
http://blog.csdn.net/xoyojank/article/details/1883520 什么是景深效果? 景深效果,简称DOF,在人眼跟光学摄像设备上很常见.如下图: 简单地来 ...
- 基于ABP做一个简单的系统——实战篇:1.项目准备
现阶段需要做一个小项目,体量很小,业务功能比较简单,就想到用最熟悉的.net来做,更何况现在.net core已经跨平台,也可以在linux服务器上部署.所以决定用.net core 3.1+mysq ...
- 尝试从零开始构建我的商城 (一) :使用Abp vNext快速一个简单的商城项目
尝试从零开始构建我的商城 (一) :使用Abp vNext快速搭建一个简单的项目 前言 GitHub地址 https://github.com/yingpanwang/MyShop 此文目的 本文将尝 ...
随机推荐
- win10将python打包成apk详细文档
打包不支持windows所以可以找一台linux的电脑 或者用win10子系统(推荐) 我用的是Ubuntu 方法:https://www.jianshu.com/p/fcf21d45ea74 我简单 ...
- java springboot api接口使用easyexcle导出xlsx
提示 使用这种方式,会使你的项目打jar包后,体积增加20MB左右(仅为个人测试) 如果你对表格样式.格式没有要求,可以曲线救国,代码看我其他文章 添加pom依赖 <!--导出excle依赖-- ...
- 「Note」图论方向 - 网络流
1. 网络流 1.1. 定义 1.1.1. 网络 网络是指一个有向图 \(G=(V,E)\),每条边 \((u,v)\in E\) 有一个权值,\(c(u,v)\) 称为容量,当 \((u,v)\no ...
- harbor镜像仓库拉取所有镜像的信息(镜像版本,tag,大小,最后拉取时间)
# -*- coding: utf-8 -*- # author: yuhaohao import requests from requests.auth import HTTPBasicAuth f ...
- ChatMoney让你不再恋爱脑!
本文由 ChatMoney团队出品 你是否曾经想过,为什么我们会在恋爱中变得如此"上头",仿佛整个世界都围绕着那个TA旋转? 恋爱脑,通常是指一个人在恋爱中过度投入.过度依赖对方, ...
- 从“看懂世界”到“改造世界”:AI发展的四个阶段你了解了吗?
过去几年,人工智能一路狂飙,从识图识声,到能写能画,再到能干活做决策,甚至走上现实生活的"物理战场".你是否也曾困惑,AI到底发展到哪个阶段了?又有哪些能力正在悄悄进化? Nvid ...
- 智能指标 AIMetrics 赋能:构建一体化数据智能决策中枢
数据,究竟是静态的历史记录还是流动的企业资产?随着企业依赖数据决策的加深,这个问题变得愈加关键.过去,我们常常把数据看作"存储"的对象,但在今天,数据正逐步成为推动智能决策.创新和 ...
- 零基础学习CAE——Hypermesh的使用技巧
Hypermesh是一款强大的有限元前后处理软件,用于建模.网格划分.后处理和优化分析.以下是一些Hypermesh使用技巧: 1. 界面布局:在开始使用Hypermesh之前,可以调整界面布局以适应 ...
- secp256k1算法详解二(关键理论及源码分析)
1 关键结构体 1.1 secp256k1_fe secp256k1库域元素field element,其具体定义如下 /** This field implementation represents ...
- MySQL核心知识学习之路(1)
作为一个后端工程师,想必没有人没用过数据库,跟我一起复习一下MySQL吧,本文是我学习<MySQL实战45讲>的总结笔记的第一篇,总结了MySQL的基础架构.一个查询语句的执行过程 以及 ...