SmartCode(https://github.com/Ahoo-Wang/SmartCode)
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
SmartCode.ETL(Extract-Transform-Load)
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:
