Schema Initializer DryRun ConsoleHost 接入實作紀錄
1. 實作目的
本次實作將 ConsoleHost 的 schema dry run demo 從直接使用 SchemaDryRunPlanner,改為透過 SchemaInitializer 取得 SchemaInitializerResult。
目標是讓 ConsoleHost 先對齊未來 ServiceHost / WebApi 也可共用的 initializer 協調層,同時維持本階段安全邊界:不連線 MySQL、不讀取 information_schema、不執行 DDL、不改 ConsoleHost 啟動方式。
2. 本次程式 commit
| 項目 | 內容 |
|---|---|
| repo | hs-device-control-template |
| branch | poc/nmodbus-tcp |
| commit | ac52376 |
| commit 訊息 | 接入 Schema Initializer ConsoleHost DryRun 顯示 |
| 測試總數 | 318 |
3. 修改檔案
| 檔案 | 調整內容 |
|---|---|
src/HS.DeviceControl.ConsoleHost/Program.cs | ConsoleHost schema dry run 區塊改由 SchemaInitializer 產生結果,新增 FormatSchemaInitializerResult() 與 CreateSchemaInitializerDryRunDemo() |
tests/HS.DeviceControl.ModbusPoc.Tests/ConsoleHostSchemaDryRunDisplayTests.cs | 新增 initializer dry run 成功、warning、manual review、失敗與 null result 顯示測試 |
4. 實作內容
4.1 ConsoleHost 接入
ConsoleHost 原本流程:
ConsoleHost -> SchemaDryRunPlanner -> SchemaDryRunResult -> FormatSchemaDryRunResult
本次改為:
ConsoleHost -> SchemaInitializer -> SchemaInitializerResult -> FormatSchemaInitializerResult
保留既有 FormatSchemaDryRunResult(),不在本次移除舊 formatter。
4.2 顯示內容
ConsoleHost 目前會輸出:
Schema initializer dry run:
Mode=DryRun Success=True Source=ConsoleHost CorrelationId=consolehost-schema-initializer-dry-run TablesToCreate=1 ColumnsToAdd=0 IndexesToAdd=0 ManualReview=0
SQL preview:
- CREATE TABLE IF NOT EXISTS ...
Warnings:
- Dry Run 不會連線或修改 MySQL。
此輸出讓使用者可直接看到:
- 目前是
DryRun。 - 來源是
ConsoleHost。 - 有
CorrelationId可追蹤。 - SQL 只做 preview。
- 明確標示不會連線或修改 MySQL。
5. 驗證結果
| 驗證項目 | 結果 |
|---|---|
dotnet test tests\HS.DeviceControl.ModbusPoc.Tests\HS.DeviceControl.ModbusPoc.Tests.csproj | 通過 37 個測試 |
dotnet test | 通過 318 個測試 |
dotnet run --project src\HS.DeviceControl.ConsoleHost | 成功完成代表流程,並顯示 Schema initializer dry run: |
| MySQL package | 未新增 |
| 真實 DB 連線 | 未執行 |
| DDL | 未執行 |
| ConsoleHost 啟動方式 | 未修改 |
6. 影響範圍
| 範圍 | 影響 |
|---|---|
| Core | 無新增修改 |
| ConsoleHost | schema dry run 顯示來源改走 initializer |
| Tests | ModbusPoc / ConsoleHost 顯示測試增加 5 個 |
| MySQL | 無影響,仍未連線 DB |
| Workflow / TaskEngine / Adapter | 無行為變更 |
7. 已知限制
- 目前仍使用
MockSchemaInspector.Empty()。 - 尚未讀取真實 MySQL
information_schema。 - 尚未提供
--schema-dry-run或--schema-apply啟動參數。 - 尚未實作 Apply / DDL executor。
- 尚未將 schema 初始化結果寫入 TaskStore 或正式 Log 儲存。
8. 建議下一步
建議下一步進入:
ConsoleHost Schema Initializer DryRun 人工驗證紀錄
整理本次 dotnet run --project src\HS.DeviceControl.ConsoleHost 的實際輸出、驗證目的、結果判斷、限制與下一步,讓文件網站可直接看到此節點的實際效果。