如何做一個(gè)純凈版的ABP vNext 腳手架
大家好,我是張飛洪,專注.NET開發(fā)十來(lái)年。感謝您的閱讀,我會(huì)不定期分享我的學(xué)習(xí)心得和職場(chǎng)經(jīng)驗(yàn),希望我的文章能成為你成長(zhǎng)路上的助力。讓我們一起精進(jìn),共同進(jìn)步。
今天想和分享的是如何基于一套自定義的模版,用來(lái)快速搭建項(xiàng)目的腳手架。
1.各種搭建方式
我們知道ABP 有提供了自己的腳手架搭建方式,有很多種方式,比如像下面這種操作:
1.1命令行
- 創(chuàng)建控制臺(tái)項(xiàng)目
abp new Tota.Microservices -t console -o Tota.Microservices -v 9.3.0
- 創(chuàng)建Module模板項(xiàng)目(Mysql+無(wú)界面)
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
- 創(chuàng)建WebApi項(xiàng)目
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來(lái)快速搭建,比如下面這種操作:

1.3官網(wǎng)
還有一種,就是你到官網(wǎng)配置并下載

1.4其他
當(dāng)然,還有其他方式,比如基于老項(xiàng)目進(jìn)行復(fù)制,采用abp studio進(jìn)行創(chuàng)建等等
2.自定義搭建
以上搭建方式十分方便,但是我想實(shí)現(xiàn)的是結(jié)合公司自己的規(guī)范,希望腳手架能夠包含更多自己的最佳實(shí)踐,比如:
2.1每個(gè)類都有完整的注釋
/// <summary>
/// 數(shù)據(jù)集應(yīng)用服務(wù)
/// <para>版 權(quán):藍(lán)略數(shù)字科技有限公司(https://www.lanlue.cn)</para>
/// <para>作 者:張飛洪</para>
/// </summary>
public class DataSetAppService : ApplicationService, IDataSetAppService
2.2給每個(gè)接口增加注釋
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 給每個(gè)接口一個(gè)默認(rèn)模版,比如像下面這樣
/// <summary>
/// 創(chuàng)建連接器
/// </summary>
/// <param name="input">創(chuàng)建連接器入?yún)?lt;/param>
/// <returns>創(chuàng)建后的連接器</returns>
[HttpPost]
public async Task<ConnectorOutput> CreateAsync([FromBody] CreateConnectorOutput input)
{
return await _connectorAppService.CreateAsync(input);
}
當(dāng)然還有很多可能你想要預(yù)先內(nèi)置的規(guī)范,這里不一一羅列了,重點(diǎn)來(lái)了,這里要怎么實(shí)現(xiàn)呢?
3.如何實(shí)現(xiàn)
3.1 準(zhǔn)備模版項(xiàng)目
這個(gè)工作還是不可避免的,因?yàn)闆](méi)有人知道你的規(guī)范是什么,我這里簡(jiǎn)單介紹一下我們公司自己的規(guī)范,因?yàn)橐?guī)范很多,下面截圖只是冰山一角。
比如 DDD 每層的規(guī)約:

又比如,DTO 內(nèi)部的規(guī)約:

這些規(guī)約是一個(gè)公司十分重要的規(guī)范,但是你如果只是讓新人看文檔,可能不是很有感覺,如果這些規(guī)范能內(nèi)置到腳手架里面,那就太好了。
3.2 采用生成工具
-
把我的模版項(xiàng)目和工具拷貝到你的目錄下,比如叫 src目錄:

-
輸入配置參數(shù)

這個(gè)時(shí)候,下面會(huì)多出一個(gè)項(xiàng)目文件

- 打開并運(yùn)行項(xiàng)目
新生成項(xiàng)目目錄


對(duì)比模版項(xiàng)目目錄

關(guān)于生成小工具,也放在我的知識(shí)星球當(dāng)中:
浙公網(wǎng)安備 33010602011771號(hào)