Schema Initializer DryRun 第一版實作紀錄

Schema Initializer DryRun 第一版實作紀錄

1. 完成目的

本紀錄整理 Schema Initializer DryRun 第一版程式實作結果。

前一份實作前確認已決定第一版只建立 initializer 協調層,不導入真實 MySQL、不執行 DDL、不修改 ConsoleHost 啟動方式。本次程式實作依照該範圍完成。

2. 程式 repo 資訊

項目內容
repohs-device-control-template
branchpoc/nmodbus-tcp
commit52adfab
commit 訊息實作 Schema Initializer DryRun 第一版
完成時間2026-05-30

3. 新增內容

檔案說明
src/HS.DeviceControl.Core/Schema/SchemaInitializer.cs新增 RunDryRun() 協調層
src/HS.DeviceControl.Core/Schema/SchemaInitializerDryRunRequest.cs定義 initializer dry run 輸入資料
src/HS.DeviceControl.Core/Schema/SchemaInitializerResult.cs定義 initializer dry run 輸出結果
tests/HS.DeviceControl.Core.Tests/SchemaInitializerTests.cs新增 10 個 Core 測試

4. 實作範圍

第一版已完成:

5. 明確未納入

本次仍未納入:

6. 驗證結果

驗證項目結果
Core tests通過 162 個測試
全專案 dotnet test通過 313 個測試
GitHub Actions程式 repo push 後通知文件 repo workflow 成功
文件網站狀態同步status.json 已更新到 52adfab

測試仍會出現 .NET 5.0 EOL warning,屬於目前指定版本的已知狀態。

7. 實際效果

完成後,Core 已具備一個比 SchemaDryRunPlanner 更上層的協調入口。

呼叫端未來可以先建立:

SchemaInitializerDryRunRequest

再呼叫:

SchemaInitializer.RunDryRun(request)

並取得:

這代表後續 ConsoleHost、ServiceHost 或 WebApi 若要接 schema 初始化流程,可以先依賴 initializer result,而不是直接操作 planner。

8. 風險與限制

項目說明
真實 DB 尚未驗證目前仍使用 MockSchemaInspector,尚未讀取真實 MySQL metadata
Apply 尚未設計目前只能 DryRun,不會真正建立或修改 table
ConsoleHost 尚未接 initializer目前 ConsoleHost 仍直接展示既有 dry run demo
SchemaDefinitionProvider 尚未建立目前 request 仍需由呼叫端提供 SchemaDefinition

9. 建議下一步

建議下一步進入:

Schema Initializer DryRun ConsoleHost 接入設計

先討論 ConsoleHost 是否要從直接呼叫 SchemaDryRunPlanner 改為呼叫 SchemaInitializer,並保持既有啟動方式不變。

返回文件首頁