SmartCode = IDataSource -> IBuildTask -> IOutput => Build Everything
Introduction

SmartCode.Generator (代碼生成器)
Demo

Getting Started
- Install from .NET Core Global Tool
dotnet tool install --global SmartCode.CLI
- 編輯構建配置文件(默認:SmartCode.yml)
- 命令行執行SmartCode命令
- SmartCode
- 等待提示輸入配置文件路徑(可選:默認程序根目錄下SmartCode.yml文件)
- 回車執行命令
- 等待任務執行結束
- 查看輸出目錄結果
構建配置文件
Module: SmartSql.Starter
Author: Ahoo Wang
DataSource:
Name: Db
Paramters:
DbName: SmartSqlStarterDB
DbProvider: SqlServer
ConnectionString: Data Source=.;Initial Catalog=SmartSqlStarterDB;Integrated Security=True
Language: CSharp
TemplateEngine: Razor
Output:
Type: File
Path: 'E://SmartSql-Starter'
# 構建任務
Build:
ClearDir:
Type: Clear
Paramters:
Dirs: '.'
Solution:
Type: Project
Template: Sln.cshtml
Output:
Path: '.'
Name: '{{Project.Module}}'
Extension: '.sln'
SmartSqlConfig:
Type: Project
Template: SqlMapConfig.cshtml
Output:
Path: '{{Project.Module}}.API'
Name: 'SmartSqlMapConfig'
Extension: '.xml'
Entity_Project:
Type: Project
Template: Proj.cshtml
Output:
Path: '{{Project.Module}}.Entity'
Name: '{{Project.Module}}.Entity'
Extension: '.csproj'
Entity:
Type: Table
Module: Entity
Template: Entity.cshtml
Output:
Path: '{{Project.Module}}.{{Build.Module}}'
Extension: '.cs'
NamingConverter:
Table:
Tokenizer:
Type: Default
Paramters:
IgnorePrefix: 'T_'
Delimiter: '_'
Converter:
Type: Default
Paramters: { }
View:
Tokenizer:
Type: Default
Paramters:
IgnorePrefix: 'V_'
Delimiter: '_'
Converter:
Type: Pascal
Column:
Tokenizer:
Type: Default
Paramters:
Delimiter: '_'
Converter:
Type: Pascal
Repository_Project:
Type: Project
Template: Proj-Repository.cshtml
Output:
Path: '{{Project.Module}}.Repository'
Name: '{{Project.Module}}.Repository'
Extension: '.csproj'
Repository:
Type: Table
Module: Repository
Template: Repository.cshtml
Output:
Path: '{{Project.Module}}.{{Build.Module}}'
Name: 'I{{OutputName}}Repository'
Extension: .cs
NamingConverter:
Table:
Tokenizer:
Type: Default
Paramters:
IgnorePrefix: 'T_'
Delimiter: '_'
Converter:
Type: Default
View:
Tokenizer:
Type: Default
Paramters:
IgnorePrefix: 'V_'
Delimiter: '_'
Converter:
Type: Default
SqlMap:
Type: Table
Template: SqlMap-SqlServer.cshtml
Output:
Path: '{{Project.Module}}.API/Maps'
Extension: .xml
IgnoreTables: null
NamingConverter:
Table:
Tokenizer:
Type: Default
Paramters:
IgnorePrefix: 'T_'
Delimiter: '_'
Converter:
Type: Default
View:
Tokenizer:
Type: Default
Paramters:
IgnorePrefix: 'V_'
Delimiter: '_'
Converter:
Type: Default
Column:
Tokenizer:
Type: Default
Paramters:
IgnorePrefix: 'T_'
Delimiter: '_'
Converter:
Type: Default
參數名 |
說明 |
Module |
根模塊名 |
Author |
作者 |
DataSource |
數據源 |
Language |
語言:CSharp/Java/.... |
TemplateEngine |
模板引擎:目前內置:Razor/Handlebars |
Output |
輸出 |
Build |
任務構建s |
DataSource 數據源,Name:Db
屬性 Name:Db,使用DbSource插件作為數據源
DbSource.Paramters 接受以下三個參數:
參數名 |
說明 |
DbName |
數據庫名稱 |
DbProvider |
數據驅動提供者:MySql,MariaDB,PostgreSql,SqlServer,Oracle,SQLite |
ConnectionString |
連接字符串 |
Build 任務構建
參數名 |
說明 |
Type |
構建類型,Clear:用於清理目錄s/文件s,Project:用於構建單文件,如:解決方案文件/項目文件,Table: 用於構建以數據表為基礎的文件,如:Entity,Repository文件 |
Module |
構建模塊名 |
TemplateEngine |
模板引擎,可選,默認使用根模塊引擎 |
Template |
模板文件 |
Output |
輸出 |
IncludeTables |
包括表名s |
IgnoreTables |
忽略表名s |
NamingConverter |
命名轉換器 |
Paramters |
自定義構建參數 |
NamingConverter 命名轉換
屬性 |
說明 |
類型 |
Table/View/Column |
Tokenizer |
分詞器 |
Converter |
轉換器:Camel/Pascal/None |
NamingConverter.Tokenizer 分詞器
屬性 |
說明 |
Type |
Default |
Paramters.IgnorePrefix |
忽略前綴字符 |
Paramters.Delimiter |
分隔符 |
Paramters.UppercaseSplit |
使用大寫分隔,默認:true |
如何貢獻模板
為了讓更多人參與到SmartCode模板建設中來,故有以下模板規范:
- 模板作者在 src/SmartCode.Generator/RazorTemplates 中新建目錄,並以作者英文名為目錄名稱
- 把模板放置到作者目錄
- 作者目錄下必須包括 README.md 文件,以說明模板的用途場景以及使用方式
- 提交PR
ETL 構建配置
Author: Ahoo Wang
DataSource:
Name: Extract
Paramters:
DbProvider: SqlServer
ConnectionString: Data Source=.;Initial Catalog=SmartSqlDB;Integrated Security=True
Query: SELECT [Id],[UserName],[Pwd],[Status],[LastLoginTime],[CreationTime],[Deleted] FROM [T_User] Where Id>@LastMaxId And CreationTime>@LastQueryTime
PKColumn: Id
Paramters:
ETLCode: SmartCode.ETL.Test
ETLRepository: PG
Build:
Transform:
Type: Transform
Paramters:
Script: Load2PostgreSql.cshtml
Load2PostgreSql:
Type: Load
Paramters:
DbProvider: PostgreSql
ConnectionString: Server=localhost;Port=5432;User Id=postgres;Password=SmartSql; Database=smartsql_db;
Table: t_user
ColumnMapping: [{Column: UserName,Mapping: user_name}
,{Column: Pwd,Mapping: pwd}
,{Column: Status,Mapping: status}
,{Column: LastLoginTime,Mapping: lastlogintime}
,{Column: CreationTime,Mapping: creationtime}
,{Column: Deleted,Mapping: deleted}]
PreCommand:
PostCommand: