Schema Initializer DryRun ConsoleHost 接入實作前確認

Schema Initializer DryRun ConsoleHost 接入實作前確認

1. 確認目的

本文件用來確認下一步是否可進入 Schema Initializer DryRun ConsoleHost 接入實作

上一份設計文件已確認接入方向:ConsoleHost 的 schema dry run demo 應逐步從直接呼叫 SchemaDryRunPlanner,改為透過 SchemaInitializer 取得 SchemaInitializerResult

本次確認重點是把實作範圍切小,確保只做 ConsoleHost 顯示層接入,不提前導入真實 MySQL、啟動參數、DDL executor 或 Apply 模式。

2. 本次建議結論

建議可以進入下一步程式實作,但範圍需限縮為「ConsoleHost 小步接入」:

  1. 新增 CreateSchemaInitializerDryRunDemo()
  2. 新增 FormatSchemaInitializerResult(SchemaInitializerResult result)
  3. Main() 的 schema dry run 顯示區塊改呼叫 initializer demo。
  4. 保留既有 FormatSchemaDryRunResult() 與相關測試。
  5. 補 ConsoleHost 顯示測試,確認 initializer result 可正常輸出。

本節點不建議修改 ConsoleHost 啟動方式,也不建議新增 --schema-dry-run--schema-apply

3. 實作範圍確認表

項目本次是否執行判斷
新增 CreateSchemaInitializerDryRunDemo()讓 ConsoleHost 以 initializer 作為 dry run demo 入口
新增 FormatSchemaInitializerResult()專責格式化 SchemaInitializerResult
Main() 改顯示 initializer dry run只替換 schema dry run demo 的資料來源
保留 FormatSchemaDryRunResult()避免一次移除既有 planner result 顯示能力
擴充 ConsoleHost 測試驗證成功、失敗、warning、manual review、null result
執行 ConsoleHost 人工驗證實作後需執行 dotnet run --project src\HS.DeviceControl.ConsoleHost
修改 ConsoleHost 啟動參數避免影響既有代表流程
新增 MySQL package本次不連真實 DB
讀取 information_schema真實 inspector 另行確認
執行 DDLDryRun 只顯示 SQL preview
實作 Apply 模式Apply 需獨立設計與確認
修改 public method 簽章避免破壞既有測試與呼叫端

4. 建議程式改動點

4.1 ConsoleHost

建議只修改 Program.cs 內的 schema dry run demo 區塊:

CreateSchemaInitializerDryRunDemo()
FormatSchemaInitializerResult(SchemaInitializerResult result)

建議保留:

CreateSchemaDryRunDemo()
FormatSchemaDryRunResult(SchemaDryRunResult result)

保留原因:

4.2 Demo request

CreateSchemaInitializerDryRunDemo() 建議建立固定 demo request:

欄位建議值
SourceConsoleHost
CorrelationIdconsolehost-schema-initializer-dry-run
TargetSchema沿用目前 ConsoleHost demo schema
InspectRequest沿用目前 demo schema inspect request
InspectorMockSchemaInspector.Empty()

4.3 Formatter 顯示內容

FormatSchemaInitializerResult() 第一版至少顯示:

欄位顯示目的
Mode讓使用者知道目前是 DryRun
Success讓使用者知道 initializer 是否成功
Source讓 Log / Console 輸出可追蹤來源
CorrelationId讓一次 dry run 可被追蹤
Plan summary顯示 table / column / index / manual review 數量
SQL preview顯示將來可能執行的 SQL,但不執行
Warnings明確提醒 DryRun 不會執行 DDL
Error失敗時顯示 error code 與 message

5. 測試清單

下一步程式實作建議至少新增或擴充以下測試:

測試情境預期
initializer result 成功顯示 Schema initializer dry run:
顯示 mode包含 Mode=DryRun
顯示 source包含 Source=ConsoleHost
顯示 correlation id包含 CorrelationId=consolehost-schema-initializer-dry-run
顯示 SQL preview包含 SQL preview: 與 SQL 條目
顯示 warnings包含 DryRun 不執行 DDL 的警告
顯示 manual review有 manual review 時可列出項目
initializer result 失敗顯示 Schema initializer dry run failed:、error code 與 message
result 為 null顯示 Schema initializer dry run: empty.
既有 dry run formatter 測試仍需通過

6. 實作時禁止範圍

下一步實作不得:

7. 驗證方式

下一步程式實作完成後,至少需執行:

dotnet test tests\HS.DeviceControl.ModbusPoc.Tests\HS.DeviceControl.ModbusPoc.Tests.csproj
dotnet test
dotnet run --project src\HS.DeviceControl.ConsoleHost

人工驗證重點:

8. 風險與應對

風險應對
formatter 轉換時遺失 warning 或 manual review測試需覆蓋 warnings 與 manual review
新 formatter 與舊 formatter 顯示格式差異過大第一版保留相近格式,只補 initializer metadata
Main 改動影響既有 ConsoleHost 代表流程實作後執行 ConsoleHost 人工驗證
過早導入真實 DB 或 Apply本次明確禁止 MySQL package、DB 連線與 DDL

9. 驗收標準

驗收項目標準
測試dotnet test 通過
ConsoleHost 顯示可看到 initializer dry run 區塊
安全邊界無 MySQL package、無 DB 連線、無 DDL
啟動方式dotnet run --project src\HS.DeviceControl.ConsoleHost 行為不需新增參數
文件同步實作後需補實作紀錄並同步文件網站進度

10. 建議下一步

建議下一步進入:

Schema Initializer DryRun ConsoleHost 接入實作

實作順序建議:

  1. 在 ConsoleHost 新增 FormatSchemaInitializerResult() 測試。
  2. 新增 CreateSchemaInitializerDryRunDemo()
  3. Main() 的 schema dry run 區塊改用 initializer demo。
  4. 執行 ConsoleHost 測試與全專案測試。
  5. 執行 ConsoleHost 人工驗證。
  6. 補實作紀錄並同步文件網站進度。
返回文件首頁