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

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

返回 docs

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

本文件承接 3D Plugin / 多設備單元邊界分析3D Plugin / 多設備單元決策確認表3D contract 草案 / 實作前確認表3D contract 決策確認表,用來把 3D 進入程式實作前的 repo 結構、可承接能力、候選修改範圍與停止線整理清楚。

本次只做唯讀盤點與文件確認,不修改程式 repo,不載入外部 DLL,不建立 Plugin Loader,不修改 Adapter public contract,不修改 config schema,不新增 ServiceHost / WebApi,也不執行 DB 寫入、DDL 或正式 Apply。

1. 檢查結論

項目結論
程式 repohs-device-control-template
本機路徑C:\Users\Evan\OneDrive - 鴻森智能科技有限公司\重要資料\hs-device-control-template
分支poc/nmodbus-tcp
最新 commitaee6ab6a2c3818ecdd244ce7f1db01d763ed4a14
工作樹乾淨,無待提交變更
SolutionHS.DeviceControl.sln
目前階段判斷3D 程式 repo 已具備 Application contract 承接位置,可進入「3D Application contract 草案 / 實作前確認」文件整理
本次是否改程式

結論:目前程式 repo 的 HS.DeviceControl.Application 專案已存在,且只參考 CoreAdapters,適合作為 3D 第一版 contract 的放置層。3D 不建議直接改 CoreIDeviceAdapterDeviceAdapterDispatcherFactory 或現有 config schema;第一步應先在 Application 層整理 ControlUnits、Resources、Commands、Plugins 的 read-only / planning contract。

2. 檢查方法

檢查項目結果
git status --short --branch程式 repo 位於 poc/nmodbus-tcp...origin/poc/nmodbus-tcp,工作樹乾淨
git rev-parse HEADaee6ab6a2c3818ecdd244ce7f1db01d763ed4a14
Solution / csproj 讀取已確認 HS.DeviceControl.ApplicationHS.DeviceControl.Application.Tests 已在 solution 內
Application service 讀取已確認 TaskControlServiceDeviceStatusServiceSchemaPreviewServiceHealthService
Adapter 邊界讀取已確認 IDeviceAdapterDeviceAdapterDispatcherDeviceAdapterDispatcherFactory
Config schema 讀取已確認現有 devices.json / workflows.json 仍以 DeviceIdConnectionTypeCommandName 為核心
3D 關鍵字掃描未找到 ControlUnitStationResourceLockCommandQueuePluginLoaderAssembly.LoadLoadFrom(...)LoadFile(...)
污染字串掃描程式 repo AGENTS.mdREADME.mddocssamples 未找到污染字串

3. Solution 與專案盤點

專案路徑目前角色對 3D 的意義
HS.DeviceControl.Coresrc/HS.DeviceControl.Core/HS.DeviceControl.Core.csprojWorkflow、Task、Result、Log、Schema、Config 核心 contract3D 不應把 ControlUnit、Resource Lock、Plugin Loader 或案場客製流程塞進 Core。
HS.DeviceControl.Adapterssrc/HS.DeviceControl.Adapters/HS.DeviceControl.Adapters.csprojIDeviceAdapter、Dispatcher、Mock、Modbus TCP PoC3D 第一版應維持 Adapter public contract,不直接修改 IDeviceAdapter
HS.DeviceControl.Applicationsrc/HS.DeviceControl.Application/HS.DeviceControl.Application.csprojTask / Device / Schema / Health 的 Application contract 與薄 service最適合承接 3D 第一版 ControlUnits、Resources、Commands、Plugins contract。
HS.DeviceControl.ConsoleHostsrc/HS.DeviceControl.ConsoleHost/HS.DeviceControl.ConsoleHost.csprojConsole demo 與人工驗證入口不應放 3D contract;未來只可作為展示或驗證入口。
HS.DeviceControl.Infrastructure.MySqlsrc/HS.DeviceControl.Infrastructure.MySql/HS.DeviceControl.Infrastructure.MySql.csprojMySQL TaskStore、TraceStore、LogWriter、Schema Inspector3D 第一版不應依賴 DB 或正式資料表。
HS.DeviceControl.Application.Teststests/HS.DeviceControl.Application.Tests/HS.DeviceControl.Application.Tests.csprojApplication contract 單元測試3D contract 第一版測試應優先放在此專案。

4. 既有可承接能力

能力已存在位置3D 可承接方式
Application service 模式src/HS.DeviceControl.Application/*可照 Task / Device / Schema / Health 的 request / result / service 風格新增 3D contract。
設備狀態查詢DeviceStatusService / IDeviceStatusService可作為多設備單元狀態彙總的 read-only 基礎,但目前只吃單一 IDeviceAdapter
設備 dispatcherDeviceAdapterDispatcher已支援多個 DeviceId 註冊與命令分派,可作為多設備基礎,但還沒有 ControlUnit / Resource 隔離。
Adapter factoryDeviceAdapterDispatcherFactory已依 ConnectionType 建立 Mock / ModbusTcp;不適合直接塞 Plugin Loader,需先抽出 plugin metadata / registry contract。
Workflow 命令執行IWorkflowCommandExecutor / MockCommandExecutor3D 若加入 Resource Lock 或 Command Queue,應包在 Application / command planning 層,不讓 WorkflowEngine 直接知道硬體調度細節。
Config 保留 AdapterSettingsDeviceConfig.AdapterSettingsDeviceCommandConfig.AdapterSettings可保留設備專屬細節,但 3D 第一版不應修改正式 config schema。
測試風格HS.DeviceControl.Application.Tests可用 fake / in-memory service 測試第一版 contract,不連 DB、不啟動 Host。

5. 目前缺口

缺口目前狀態判斷
ControlUnitId / StationId尚未存在可先在 Application contract 定義 DTO,不改 workflow / device config。
ResourceId / Resource Lock尚未存在可先做 lock request / preview / result contract,不實作跨 process 鎖。
Command Queue尚未存在可先做 command plan / enqueue request contract,不建立背景 queue 或 worker。
Plugin metadata尚未存在可先做 PluginDescriptor / PluginCatalog contract,不載入 DLL。
Plugin Loader尚未存在仍需停止,不得 Assembly.Load 或掃描外部資料夾。
Adapter public contract 擴充尚未需要第一版應維持 IDeviceAdapterExecuteResultDeviceCommand 不變。
Config schema version / migration尚未存在不在第一版改 devices.json / workflows.json schema。

6. 建議的第一版 3D contract 範圍

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

候選區塊建議 namespace / 資料夾第一版內容邊界
ControlUnitsHS.DeviceControl.Application.ControlUnitsControlUnitDefinitionControlUnitDeviceBindingControlUnitStatusResult只定義單元與設備綁定,不改 workflow config。
ResourcesHS.DeviceControl.Application.ResourcesResourceDefinitionResourceLockRequestResourceLockResult只做 contract 與 in-memory 測試,不做正式跨 process lock。
CommandsHS.DeviceControl.Application.CommandsDeviceCommandPlanRequestDeviceCommandPlanResultDeviceCommandPlanItem只做 command plan / validation,不執行命令、不建立背景 queue。
PluginsHS.DeviceControl.Application.PluginsPluginDescriptorPluginCatalogResultIPluginCatalogService只列 metadata,不掃描 DLL、不載入 assembly。
CommonHS.DeviceControl.Application.Common新增 3D 專用錯誤代碼常數只補 Application 層錯誤,不改 Core error contract。

7. 候選修改檔案清單

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

類型候選路徑用途是否已授權
新增 contractsrc/HS.DeviceControl.Application/ControlUnits/*多設備單元定義、設備綁定與狀態摘要尚未
新增 contractsrc/HS.DeviceControl.Application/Resources/*Resource Lock request / result / definition尚未
新增 contractsrc/HS.DeviceControl.Application/Commands/*Command plan / queue 前置 contract尚未
新增 contractsrc/HS.DeviceControl.Application/Plugins/*Plugin metadata / catalog read-only contract尚未
修改常數src/HS.DeviceControl.Application/Common/ApplicationErrorCodes.cs補 3D Application contract 錯誤代碼尚未
新增測試tests/HS.DeviceControl.Application.Tests/*3D Application contract 單元測試尚未

8. 測試策略候選

測試節點驗證目的建議方式
ControlUnit 定義驗證確認 ControlUnitIdStationId、Device binding 必填與重複檢查Application.Tests 單元測試。
Resource Lock request確認缺少 ResourceId、逾時、重複 lock request 可回傳標準錯誤fake / in-memory lock service。
Command Plan確認 command plan 可列出 device / command / resource dependency,但不執行命令不呼叫 IDeviceAdapter.Execute()
Plugin Catalog確認 metadata 可列出 plugin id、version、supported device type不使用 Assembly.Load
停止線測試確認第一版不修改 Adapter contract、不改 config schema、不建立 Plugin Loader以檔案範圍與 contract 測試確認。

9. 仍需停止的項目

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

10. 建議下一步

本次唯讀盤點判定:3D 可進入「Application contract 草案 / 實作前確認」整理,第一版建議只新增 Application 層 DTO、request / result、read-only catalog / planning service 與 Application.Tests,不進 Plugin Loader、不改 Adapter、不改 config schema。

建議下一步整理「3D Application contract 草案 / 實作前確認表」,讓使用者先確認候選檔案、contract 名稱、測試策略與停止線,再決定是否進入程式實作。