3D contract 草案 / 實作前確認表

本頁整理 3D contract 第一版進入程式實作前的候選範圍與七項確認。

返回 docs

3D contract 草案 / 實作前確認表

本文件承接 3D Plugin / 多設備單元邊界分析3D Plugin / 多設備單元決策確認表,把 3D 進入程式實作前可能需要的 Application 層 contract、DTO、測試策略與停止線整理成可逐項確認的草案。

本文件只做 contract 草案與實作前確認,不代表已同意新增程式碼、載入外部 DLL、新增 Plugin Loader、修改 IDeviceAdapter public contract、導入 plugin / queue 套件、修改 config schema、新增 ServiceHost / WebApi、執行 DB DDL 或接真實硬體。

1. 確認狀態

項目內容
文件狀態已確認
整理日期2026-06-05
確認日期2026-06-05
對應階段第三階段 3D Plugin / 多設備單元
前置文件3D Plugin / 多設備單元邊界分析3D Plugin / 多設備單元決策確認表
本次目標確認 3D contract 第一版候選範圍,作為進程式 repo 前的停止點
本次不做不改程式、不新增專案、不載入 DLL、不新增 Plugin Loader、不改 Adapter contract、不改 config schema、不新增 ServiceHost / WebApi
使用者確認使用者已回覆七項決策全部同意

2. 第一版定位

3D contract 第一版的目標,是先讓多設備單元、Resource Lock、Command Queue 與 Plugin metadata 有可討論的 Application 層 contract 候選,避免後續把資源鎖、排隊、plugin 載入與設備 adapter 邏輯直接混入 Core、Workflow node、Host 或 Controller。

原則說明
Core 保持乾淨Core 不知道 DLL、Plugin manifest、Queue implementation 或 Resource Lock storage。
Adapter contract 先不改第一版不新增 IDeviceAdapter public method,避免破壞既有 Mock / Modbus Adapter。
Application 層只做協調 contract可放候選 request / result / service interface,但不接真實背景服務。
Infrastructure 延後Plugin Loader、DLL 掃描、manifest reader、DB 保存與分散式鎖都不是本次預設範圍。
測試先用 fake / in-memory不連 DB、不載入 DLL、不接硬體、不修改啟動方式。

3. 建議命名與候選檔案

以下為程式實作前的候選命名,不代表已授權新增檔案。

類型候選 namespace / 路徑用途
多設備單元HS.DeviceControl.Application.ControlUnits定義 ControlUnitIdStationIdDeviceIdResourceKey 的關係。
Resource LockHS.DeviceControl.Application.Resources定義 lock request、result、mode、owner、release reason。
Command QueueHS.DeviceControl.Application.Commands定義 queue request、status、cancel、priority 與錯誤摘要。
Plugin metadataHS.DeviceControl.Application.Plugins定義 plugin id、version、capability、checksum 與 adapter mapping metadata。
測試HS.DeviceControl.Application.Tests使用 fake / in-memory 測試 contract 邊界。

4. contract 草案重點

主題候選內容停止線
多設備單元ControlUnitDescriptorStationDescriptorDeviceBindingDescriptor不改 config schema,不保存 IP / Port / secret。
Resource LockIResourceLockServiceResourceLockRequestResourceLockResultResourceReleaseRequest不新增 DB table,不導入分散式鎖。
Command QueueICommandQueueServiceCommandQueueRequestCommandQueueStatusResultCommandQueueCancelRequest不導入 queue 套件,不改啟動方式。
Plugin metadataPluginMetadataPluginCapabilityDescriptorPluginCompatibilityInfo不建立 Loader,不載入 DLL,不保存正式 DLL 路徑。

5. 七項確認表

使用者已於 2026-06-05 以以下格式確認:

3D contract 確認:
1. 同意
2. 同意
3. 同意
4. 同意
5. 同意
6. 同意
7. 同意
編號決策項建議定案同意後可進入停止線
1多設備單元 contract同意以 ControlUnitId / StationId / DeviceId / ResourceKey 作為第一版 DTO 命名基礎。可進程式 repo 結構檢查。不立即修改 config schema。
2Resource Lock contract同意第一版候選放在 Application 層,先做 request / result / fake 邊界。可整理 lock service / DTO 候選範圍。不新增 DB table、不導入分散式鎖。
3Command Queue contract同意第一版候選放在 Application 層,先做 in-memory / fake contract。可整理 enqueue / status / cancel contract。不導入 queue 套件、不改啟動方式。
4Plugin metadata contract同意第一版只做 metadata / manifest DTO 候選。可整理 plugin id、version、capability、checksum 與相容性欄位。不建立 Loader、不載入 DLL、不保存正式 DLL 路徑。
5Adapter contract 穩定性同意維持 IDeviceAdapter public contract 不變。後續可先用 wrapper / factory 映射。未確認前不新增或改動 Adapter public method。
6測試策略同意第一版只做 Application.Tests 的 DTO / fake / in-memory 測試。可建立不連 DB、不載入 DLL、不接硬體的測試範圍。不跑真實硬體、不連正式 DB。
73D 停止線同意未再次確認前不改 config schema、不新增 ServiceHost / WebApi、不改 route、不保存敏感資訊。可保留 3D contract 為安全、可回退的前置節點。不保存密碼、Token、IP、Port、完整 connection string。

6. 測試策略

測試目的邊界
DTO 必填欄位驗證確認 ControlUnitIdResourceKeyDeviceIdCommandName 等必要欄位不可空白。不載入設定檔。
Resource Lock fake確認同一 ResourceKeyExclusive 模式下不能被第二個 owner 取得。in-memory,不寫 DB。
Command Queue fake確認 enqueue 後可查 status,cancel 可標示 Cancelled不呼叫 Adapter Execute()
Plugin metadata validation確認 plugin id、version、capability、checksum 欄位可驗證。不讀 DLL、不掃描資料夾。
Sensitive data guard確認 metadata / resource key 不含密碼、Token、完整 connection string。不保存 secret。

7. 仍需停止的項目

8. 建議下一步

七項決策已由使用者確認同意。建議先完成 3D 完成稽核、必要文件同步、文件 repo stage / commit / push 與部署查驗;後續若要進入「3D 程式 repo 結構檢查與實作前確認」,仍只可唯讀盤點 HS.DeviceControl.Application 是否適合承接 ControlUnits、Resources、Commands 與 Plugins contract,不直接修改程式。