3C 程式 repo 結構檢查與實作前確認

本頁整理 3C 進入 Application Service contract 前的程式 repo 唯讀盤點與停止線。

返回 docs

3C 程式 repo 結構檢查與實作前確認

本文件承接 3C Service / API 邊界分析3C Service / API 決策確認表,用來把 3C 進入程式實作前的 repo 結構、可承接能力、候選修改範圍與停止線整理清楚。

本次只做唯讀盤點與文件確認,不修改程式 repo,不新增 ServiceHost / WebApi 專案,不新增 API route,不導入套件,不修改 public method 簽章,也不執行 DB 寫入、DDL 或正式 Apply。

1. 檢查結論

項目結論
程式 repohs-device-control-template
本機路徑C:\Users\Evan\OneDrive - 鴻森智能科技有限公司\重要資料\hs-device-control-template
分支poc/nmodbus-tcp
工作樹乾淨,無待提交變更
SolutionHS.DeviceControl.sln
目前階段判斷3C Application Service contract 七項決策已確認,可進入第一版程式實作
本次是否改程式

2. Solution 與專案盤點

專案路徑目前角色對 3C 的意義
HS.DeviceControl.Coresrc/HS.DeviceControl.Core/HS.DeviceControl.Core.csprojWorkflow、Task、Result、Log、Schema 與核心 contract3C 不應讓 Core 依賴 WebApi、ServiceHost 或 UI;可作為 Application Service 使用的核心能力來源。
HS.DeviceControl.Adapterssrc/HS.DeviceControl.Adapters/HS.DeviceControl.Adapters.csprojIDeviceAdapter、Dispatcher、Mock、Modbus TCP PoCDevice Status 與任務執行只能透過 Adapter 邊界,不得在 API 或 Host 直接操作硬體通訊。
HS.DeviceControl.ConsoleHostsrc/HS.DeviceControl.ConsoleHost/HS.DeviceControl.ConsoleHost.csproj第一階段與 PoC 驗證入口可提供 demo 與格式化經驗,但不等於正式 ServiceHost
HS.DeviceControl.Infrastructure.MySqlsrc/HS.DeviceControl.Infrastructure.MySql/HS.DeviceControl.Infrastructure.MySql.csprojMySQL TaskStore、TraceStore、LogWriter、Schema Inspector3C 查詢與持久化可引用既有 infrastructure,但不得讓 WebApi 直接碰 gateway 或 SQL builder。
HS.DeviceControl.Core.Teststests/HS.DeviceControl.Core.Tests/HS.DeviceControl.Core.Tests.csprojCore 單元測試若新增 Core public contract,需補 Core tests。
HS.DeviceControl.Adapters.Teststests/HS.DeviceControl.Adapters.Tests/HS.DeviceControl.Adapters.Tests.csprojAdapter 單元測試若動 Adapter 邊界或 Device Status 來源,需補 Adapter tests。
HS.DeviceControl.Infrastructure.MySql.Teststests/HS.DeviceControl.Infrastructure.MySql.Tests/HS.DeviceControl.Infrastructure.MySql.Tests.csprojMySQL infrastructure 測試與 manual-only 驗證入口若接 TaskStore / TraceStore 查詢策略,需維持 fake gateway 與 manual-only gate。
HS.DeviceControl.WorkflowSimulation.Teststests/HS.DeviceControl.WorkflowSimulation.Tests/HS.DeviceControl.WorkflowSimulation.Tests.csproj代表流程模擬測試若 Application Service 會啟動 workflow,需確認是否補整合層測試。
HS.DeviceControl.ModbusPoc.Teststests/HS.DeviceControl.ModbusPoc.Tests/HS.DeviceControl.ModbusPoc.Tests.csprojModbus TCP PoC 與 ConsoleHost 驗證3C 不應把真實硬體或長時間連線驗證混入第一版 API contract。

3. 既有可承接能力

能力已存在位置3C 可承接方式
任務執行Core.Tasks.TaskEngineApplication Service 可呼叫 TaskEngine.Execute(...),但是否新增協調層需另行確認。
Workflow 執行Core.Workflow.WorkflowEngineServiceHost 未來應透過 WorkflowEngine / TaskEngine 執行,不在 Host 或 Controller 重寫 node 邏輯。
任務保存與查詢Core.Tasks.ITaskStoreInMemoryTaskStoreInfrastructure.MySql.Tasks.MySqlTaskStore可支援 Task Control 查詢,但正式保存責任與 ServiceHost 啟動流程需另行確認。
Trace 查詢Core.Logging.ITaskTraceStoreInfrastructure.MySql.Logging.MySqlTaskTraceStore可作為 WebApi / Debug Tool read-side 基礎;不得無條件全表查詢。
Adapter 邊界Adapters.IDeviceAdapterDeviceAdapterDispatcherDevice Status 第一版應只讀狀態,不下控制命令。
Schema previewCore.Schema.SchemaManualApplyPreviewBuilder 與相關 modelSchema Preview API 未來可回傳 preview、風險與 PlanHash,仍不得 Apply。
Log / ErrorCore.Logging.ILogWriterCore.Common.ResultErrorInfoExecuteResultAPI response 與 ServiceHost log 應保留標準錯誤資訊,不只回傳 bool。

4. 目前尚未存在的 3C 邊界

項目目前狀態判斷
HS.DeviceControl.Application 專案尚未存在若要建立共用 Application Service 層,需先確認新增專案與引用方向。
HS.DeviceControl.ServiceHost 專案尚未存在本文件不授權建立;第一版仍只做文件與 contract 草案。
HS.DeviceControl.WebApi 專案尚未存在本文件不授權建立 Controller、route、endpoint 或 middleware。
背景服務 / Worker尚未存在不導入 IHostBackgroundService 或 Windows Service 啟動方式。
認證授權套件尚未導入權限策略需另行決策,不在本批新增套件。
佇列 / 排程套件尚未導入Task Queue、Retry Queue、Resource Lock 屬後續設計。
外部 Plugin Loader尚未存在不在 3C 第一版處理。

5. Application Service 放置位置候選

方案說明優點風險 / 限制本次建議
新增 HS.DeviceControl.Application 專案建立 ServiceHost 與 WebApi 可共用的協調層分層清楚,不讓 Controller / Host 複製任務流程會新增 solution project 與 public contract,需使用者確認可作為下一步草案方向,但本次不建立
放在 HS.DeviceControl.Core namespace直接在 Core 內新增應用協調 service少一個專案,引用簡單Core 可能承載過多應用層責任,未來容易碰到 Host / API 語意不建議第一版直接採用
放在 HS.DeviceControl.ConsoleHost 或 Host 內Host 自行包 Task / Device / Schema 服務實作最快ServiceHost 與 WebApi 會重複邏輯,違反共用協調層目的不建議
放在 Infrastructure.MySql讓 DB 相關查詢集中方便接 MySQL store會把任務控制、設備狀態與 DB infrastructure 綁死不建議

結論:若後續要進入程式實作,建議先整理 HS.DeviceControl.Application 的最小 contract 草案與測試策略,再由使用者確認是否新增專案。

6. 第一版候選 contract 草案範圍

以下只列候選能力,不代表已同意新增檔案或 public method。

候選服務目的可引用既有能力第一版邊界
TaskControlService / ITaskControlService建立任務、回傳 TaskId、查詢任務摘要、提出取消要求TaskEngineITaskStoreTaskStateMachine不直接建立 WebApi route;取消行為需先定義合法狀態。
TaskTraceQueryService查詢 task traceITaskTraceStore只做 read-side;沿用 Limit + 1 / HasMore 與敏感資訊遮罩。
DeviceStatusService查詢設備狀態與最後錯誤摘要IDeviceAdapter.GetStatus()DeviceAdapterDispatcher第一版只讀,不下設備命令。
SchemaPreviewService產生 schema preview、風險、PlanHashSchemaManualApplyPreviewBuilder只回傳 preview,不執行 DDL、不 Apply。
HealthService回傳 host / DB / adapter 健康摘要Log、TraceStore、Adapter status不回傳密碼、Token、完整 connection string 或敏感錯誤。

7. 候選修改檔案清單

以下是「若下一步取得明確授權」才可能進入的候選清單;本次沒有修改這些程式檔案。

類型候選路徑用途是否已授權
新增專案src/HS.DeviceControl.Application/HS.DeviceControl.Application.csprojApplication Service 協調層尚未
新增 contractsrc/HS.DeviceControl.Application/Tasks/*Task Control request / result / service contract尚未
新增 contractsrc/HS.DeviceControl.Application/Devices/*Device Status read-only contract尚未
新增 contractsrc/HS.DeviceControl.Application/Schema/*Schema Preview service contract尚未
新增 contractsrc/HS.DeviceControl.Application/Health/*Health summary contract尚未
新增測試tests/HS.DeviceControl.Application.Tests/*Application Service 單元測試尚未
修改 solutionHS.DeviceControl.sln加入 Application 與 Tests 專案尚未

8. 測試策略候選

測試節點驗證目的建議方式
Task Control 建立任務確認建立後回傳 TaskId,不讓 HTTP 長時間阻塞使用 fake executor / in-memory store 的單元測試。
Task 查詢確認可依 TaskId 回傳狀態、時間、錯誤與節點摘要不連真實 DB,先用 InMemoryTaskStore
取消請求確認終態不可回到 running,非法狀態轉換會被擋下沿用 TaskStateMachine 規則。
Device Status確認只呼叫 GetStatus(),不執行 Execute()使用 fake adapter 驗證 read-only。
Schema Preview確認回傳 preview、PlanHashCanApply=False使用 mock schema inspector,不執行 DDL。
Health確認回傳摘要且不洩漏敏感資訊使用 fake dependency 狀態與遮蔽測試。

9. 仍需停止的項目

本文件完成後,以下項目仍不得自動執行:

10. 建議下一步

已整理 3C Application Service contract 草案 / 實作前確認表,並已完成 3C Application contract 決策確認紀錄。下一步可進入 HS.DeviceControl.ApplicationHS.DeviceControl.Application.Tests 第一版程式實作;仍不新增 ServiceHost / WebApi

在使用者明確同意前,仍不進入程式實作。