第四階段 4B / 4C / 4D 執行切分表
本文件承接 4A WebApi / ServiceHost / Plugin Loader 邊界分析 與 4A WebApi / ServiceHost / Plugin Loader 決策確認表,用來回答 WebApi、ServiceHost、Plugin Loader 預計在哪個階段進入正式執行。
本文件只整理第四階段路線切分,不代表已同意新增 WebApi 專案、ServiceHost 專案、Plugin Loader、外部 DLL 載入、API route、Controller、middleware、背景服務套件、認證授權套件、config schema 調整、public method 簽章變更、正式 DB DDL 或真實硬體控制。
1. 結論
| 功能 | 預計執行階段 | 第一個輸出 | 程式實作條件 |
| WebApi | 4B | WebApi contract 草案 / 實作前確認表 | 使用者確認 API route、DTO、權限、錯誤格式與停止線後,才可建立 HS.DeviceControl.WebApi。 |
| ServiceHost | 4C | ServiceHost contract 草案 / 實作前確認表 | 使用者確認背景生命週期、Adapter lifecycle、Health、Log / Trace、部署方式與停止線後,才可建立 HS.DeviceControl.ServiceHost。 |
| Plugin Loader | 4D | Plugin Loader 信任模型與 metadata contract 草案 / 實作前確認表 | 使用者確認來源信任、版本、簽章、隔離、卸載、回復策略與停止線後,才可建立 Loader 或載入外部 DLL。 |
建議順序維持:
```text
4A 前置確認
-> 4B WebApi
-> 4C ServiceHost
-> 4D Plugin Loader
```
2. 為什麼不是 4A 直接實作
4A 的職責是把第三階段完成的 HS.DeviceControl.Application 放到正式平台視角檢查,確認 WebApi、ServiceHost、Plugin Loader 是否都應透過同一個 Application contract 承接任務控制、設備狀態、Schema Preview、Health、多設備單元、Resource Lock、Command Queue 與 Plugin metadata。
如果 4A 直接新增正式入口,會讓 API route、背景服務啟動方式、Plugin trust model、設定來源與部署規則在尚未定案時成為外部契約。這會增加後續返工,也可能讓 Workflow、Adapter、DB gateway 或 Plugin Loader 的責任邊界混在一起。
3. 階段切分總表
| 階段 | 主題 | 可做事項 | 不做事項 | 完成基準 |
| 4A | 正式入口前置確認 | 邊界分析、七項決策確認、4B / 4C / 4D 切分。 | 不新增正式入口、不新增 route、不建立 Loader、不改 public method 簽章、不改 config schema。 | 4A 決策確認表完成,並明確排定 WebApi、ServiceHost、Plugin Loader 的後續階段。 |
| 4B | WebApi | API contract、request / response DTO、錯誤格式、權限模型、route 候選、Application service mapping、實作前確認。 | 不直接操作 Core / Adapter / DB gateway;不做 DB DDL / ALTER / Apply;不導入 ServiceHost 或 Plugin Loader。 | WebApi contract 草案與決策確認已完成;可先盤點程式 repo 後進入最小 WebApi 第一版實作。 |
| 4C | ServiceHost | 背景生命週期、任務協調、Adapter lifecycle、Health、Log / Trace、Operator / HostName / AppVersion、部署模型、實作前確認。 | 不提供 HTTP、不與 WebApi 混責;未確認前不新增 ServiceHost 專案或 Windows Service。 | ServiceHost contract 草案與實作前確認表完成;使用者確認後才可進程式實作。 |
| 4D | Plugin Loader | 信任來源、版本、簽章、metadata、registration、錯誤隔離、卸載與回復策略、實作前確認。 | 不掃描 plugin folder、不載入外部 DLL、不執行外部程式碼;未確認前不新增 Loader。 | Plugin Loader 信任模型與 metadata contract 草案完成;使用者確認後才可進 Loader 實作。 |
4. 4B WebApi 執行邊界
WebApi 預計放在 4B,原因是 HTTP 入口會變成外部系統或現場工具依賴的契約,必須先固定 API 類型、權限、錯誤格式、DTO 與 Application service mapping。
| 項目 | 4B 建議內容 |
| 入口定位 | 遠端任務控制、查詢、取消、狀態、Health 與 Trace 查詢的 HTTP 邊界。 |
| 只允許呼叫 | HS.DeviceControl.Application contract。 |
| 不允許 | Controller 直接寫 Workflow / Node 邏輯、直接操作 Adapter、直接碰 DB gateway。 |
| 主要前置 | API route 候選、DTO 命名、錯誤格式、權限模型、Log / Trace 對應。 |
| 程式實作條件 | 使用者已確認 4B WebApi contract 草案 / 實作前確認表 與 4B WebApi 決策確認紀錄;下一步需先盤點程式 repo。 |
5. 4C ServiceHost 執行邊界
ServiceHost 預計放在 4C,原因是背景常駐入口會牽涉啟動方式、生命週期、部署、重啟恢復、Adapter 連線管理與 Health。這些規則需要在 WebApi 的 HTTP 契約穩定後再切出來,避免背景服務同時承擔 HTTP 邊界。
| 項目 | 4C 建議內容 |
| 入口定位 | 正式背景執行入口,負責任務協調、Adapter lifecycle、Health、Log / Trace。 |
| 只允許呼叫 | HS.DeviceControl.Application contract 與經確認的 Adapter 管理邊界。 |
| 不允許 | ServiceHost 同時提供 HTTP、直接承擔 API route、把流程邏輯寫進 Host。 |
| 主要前置 | 背景生命週期、啟停策略、健康檢查、重啟恢復、operator、host name、app version。 |
| 程式實作條件 | 使用者確認 4C ServiceHost contract 草案 / 實作前確認表。 |
6. 4D Plugin Loader 執行邊界
Plugin Loader 預計放在 4D,原因是它風險最高,牽涉外部 DLL 來源、版本、簽章、隔離、卸載與錯誤回復。3D 已完成 Plugin metadata 與多設備單元 Application contract,但 metadata 不等於可以執行外部程式碼。
| 項目 | 4D 建議內容 |
| 入口定位 | 外部設備模組或 plugin 的信任、版本、metadata、registration 與載入策略。 |
| 可沿用基礎 | 3D 的 Plugin metadata、ControlUnit、Resource Lock、Command Queue 與 Application error code。 |
| 不允許 | 未確認前掃描 plugin folder、載入外部 DLL、執行外部程式碼。 |
| 主要前置 | 信任來源、簽章、版本相容、隔離策略、卸載策略、失敗回復、審計紀錄。 |
| 程式實作條件 | 使用者確認 4D Plugin Loader 信任模型與 metadata contract 草案 / 實作前確認表。 |
7. 建議產出順序
| 順序 | 文件 / 節點 | 目的 |
| 1 | 4A 決策確認結果回填 | 把使用者七項同意或調整回填到 4A 決策確認表。 |
| 2 | 第四階段標準 / 文件 / 施作範圍 / 驗收條件總表 | 固定第四階段總標準、文件清單、可施作項目與驗收條件。 |
| 3 | 第四階段目標模式完成稽核表 | 確認本輪文件型標準包已收斂,並保留後續程式實作停止線。 |
| 4 | 4B WebApi contract 草案 / 實作前確認表 | 已建立,固定 API route 候選、DTO、錯誤格式、權限與停止線。 |
| 5 | 4B WebApi 決策確認表 | 已確認,使用者同意採用建議路線並允許最小 WebApi 實作。 |
| 6 | 4B WebApi 第一版實作 | 下一步,先盤點程式 repo,再建立最小 WebApi 專案與測試。 |
| 7 | 4C ServiceHost contract 草案 / 實作前確認表 | 固定背景生命週期、Adapter lifecycle、Health、Log / Trace 與部署邊界。 |
| 8 | 4C ServiceHost 決策確認表 | 由使用者逐項確認是否允許進入最小 ServiceHost 實作。 |
| 9 | 4C ServiceHost 第一版實作 | 只在確認後建立最小背景入口與測試。 |
| 10 | 4D Plugin Loader 信任模型與 metadata contract 草案 | 固定信任、版本、簽章、隔離與錯誤回復策略。 |
| 11 | 4D Plugin Loader 決策確認表 | 由使用者逐項確認是否允許進入 Loader 實作。 |
| 12 | 4D Plugin Loader 第一版實作 | 只在確認後建立 Loader;外部 DLL 載入仍需視信任模型逐步開放。 |
8. 停止線
在 4B / 4C / 4D 任一實作前確認完成前,仍需停止:
- 不新增
HS.DeviceControl.WebApi專案。 - 不新增
HS.DeviceControl.ServiceHost專案。 - 不新增 Plugin Loader。
- 不新增 API route、Controller、endpoint 或 middleware。
- 不新增或更換 Web framework、認證授權、背景服務、佇列或 Plugin framework 套件。
- 不修改 Core / Adapters / Infrastructure / Application public method 簽章。
- 不修改
devices.json/workflows.json/appsettings.jsonschema。 - 不掃描 plugin folder、不載入外部 DLL、不執行外部程式碼。
- 不保存密碼、Token、IP、Port、完整 connection string、正式 DLL 路徑或正式環境資訊。
- 不執行 DB 寫入、DDL、ALTER TABLE 或正式 Apply。
- 不改程式啟動方式。
- 不接真實硬體或案場客製邏輯。
9. 建議下一步
4A / 4B 切分線上驗收已通過,4B WebApi contract 草案與決策確認已建立。下一步建議先唯讀盤點程式 repo 的 Application contract、solution 結構與測試專案,再進入最小 WebApi 第一版實作。
原因是 WebApi 是外部控制與查詢入口,會先決定 route、DTO、權限與錯誤格式;ServiceHost 與 Plugin Loader 可以在此基礎上保持分責,避免背景服務與外部 DLL 載入過早擴大範圍。