4A WebApi / ServiceHost / Plugin Loader 邊界分析

回到 docs

4A WebApi / ServiceHost / Plugin Loader 邊界分析

本文件整理第三階段完成後,進入第四階段前需要先釐清的正式執行入口邊界。

本文件只做邊界分析與後續決策依據,不代表已同意新增 ServiceHost 專案、WebApi 專案、API route、Plugin Loader、外部 DLL 載入、認證授權套件、背景服務套件、正式 DB DDL、正式 Apply、敏感連線資訊保存或既有 public method 簽章調整。

1. 分析定位

4A 的目的不是直接開始寫正式 Host 或 API,而是先把第三階段已完成的 Application contract 放到正式執行平台視角下檢查:

2. 目前基準

項目目前狀態
文件 repomain,第三階段線上驗收已完成
程式 repopoc/nmodbus-tcp
程式基準 commita158551
已完成階段3A Trace 查詢、3B ManualApplyPreview、3C Application contract、3D Application contract
測試基準Application tests 30 passed;solution tests 468 passed
已存在共用層HS.DeviceControl.CoreHS.DeviceControl.AdaptersHS.DeviceControl.ApplicationHS.DeviceControl.Infrastructure.MySql
尚未建立HS.DeviceControl.ServiceHostHS.DeviceControl.WebApi、Plugin Loader、正式部署服務

3. 4A 邊界總表

邊界可討論內容目前停止線
Application contract對外提供任務控制、設備狀態、Schema 預覽、Health、多設備單元、Resource Lock、Command Queue 與 Plugin metadata 的協調入口。不修改既有 public method 簽章,不在未確認前新增破壞性契約。
WebApi未來作為遠端查詢與控制入口,只做 HTTP request / response、權限、DTO mapping、錯誤回應與呼叫 Application service。不新增 WebApi 專案、Controller、route、middleware 或 API response contract。
ServiceHost未來作為正式背景執行入口,負責生命週期、adapter lifecycle、任務協調、health 與 log / trace。不新增 ServiceHost 專案、不改啟動方式、不建立 Windows Service 或排程服務。
Plugin Loader未來處理外部 DLL 信任、版本、metadata、載入與卸載策略。不載入外部 DLL、不建立 loader、不執行外部程式碼。
Plugin metadata可沿用 3D 的 PluginDescriptor / PluginRegistrationRequest 概念,先整理資料與狀態語意。不把 metadata 等同於可執行 plugin,不建立檔案掃描或 assembly loading。
DB / Schema可引用 3A / 3B / 第二階段既有查詢與安全預覽概念。不執行 DDL / ALTER TABLE / 正式 Apply,不保存密碼或正式連線資訊。
ConsoleHost可保留 PoC 與人工驗證入口經驗。不把 ConsoleHost 直接升級成正式背景服務。
UI / 現場工具第四階段可再規劃現場工具與管理畫面。4A 不新增 Web UI、WinForms Debug Tool 或多案場管理。
真實硬體未來真實 Adapter 需遵守 Adapter contract 與 Application 協調層。4A 不接真實硬體、不改 Adapter public contract。

4. 與 3C / 3D 的承接關係

3C 已先建立 Application Service contract,讓未來 WebApi / ServiceHost 不需要直接碰 Core、Adapter 或 DB gateway。

3D 已把多設備單元、資源鎖、命令佇列、Plugin metadata 與 Application error code 收斂到 Application 層,讓正式執行入口可以用同一組語意承接平台化能力。

因此 4A 的重點是判斷「正式入口如何包住 Application 層」,不是把流程邏輯搬到 Host、Controller 或 Plugin Loader。

5. 建議 4A 決策確認項目

編號決策項目建議方向不同意時需說明
14A 只做邊界分析本節點只建立邊界分析與決策確認表,不進入程式實作。若要直接實作,需先指定是否建立 WebApi、ServiceHost 或其他正式入口,並確認風險。
2WebApi 邊界WebApi 第一版只做 HTTP 邊界、權限、DTO mapping、查詢與控制請求轉交。若 WebApi 要直接呼叫 Core / Adapter / DB,需說明如何避免流程邏輯分散。
3ServiceHost 邊界ServiceHost 第一版只做背景執行生命週期、任務協調、adapter lifecycle、health 與 log / trace。若 ServiceHost 要同時提供 HTTP,需說明部署、安全與責任切分。
4Plugin Loader 邊界先保留 metadata / contract 層,不載入外部 DLL,待信任模型與版本策略確認後再實作。若要立即載入 DLL,需先確認來源信任、簽章、版本、錯誤隔離與回復策略。
5Application 層作為共用協調層WebApi / ServiceHost / 現場工具都應透過 Application contract,不重寫 Workflow 或 Adapter 操作。若各入口各自實作,需說明如何維護一致狀態、錯誤碼、Log 與測試。
6部署與維運前置在建立正式入口前,先確認設定來源、環境變數、health、log、operator、host name、app version 與敏感資訊保存方式。若先建立入口再補維運規則,需接受後續返工與安全風險。
7停止線維持4A 不新增正式入口、不改 public method 簽章、不改 config schema、不執行 DB DDL、不接真實硬體。若要突破停止線,需另開實作前確認與使用者明確同意。

6. 主要風險

風險說明4A 建議處理方式
過早新增 WebApi若權限、DTO、錯誤格式與任務控制語意未固定,容易把臨時設計變成外部契約。先做決策確認表,再進入 API contract 草案。
ServiceHost 與 WebApi 混責背景執行與 HTTP 入口混在一起會讓部署、重啟、權限與錯誤處理難以切分。ServiceHost 不處理 HTTP,WebApi 不直接執行 Workflow。
Plugin Loader 信任風險外部 DLL 載入會牽涉版本、來源、簽章、隔離與錯誤回復。先保留 metadata 與 registration 語意,不做 loader。
設定格式過早固定入口一旦讀取正式 appsettings 或 plugin 設定,後續 schema 變更成本會提高。4A 只列出需確認欄位,不改 config schema。
DB 權限擴大正式入口若直接帶入 DB 寫入或 DDL,會超出 3A / 3B 安全邊界。DDL、ALTER、正式 Apply 與密碼保存一律另行確認。
Log 不一致多入口若各自組錯誤與 Log,追蹤 Task / Node / Device / Command 會斷裂。統一從 Application / Core result 與既有 log contract 轉換。

7. 4A 不做事項

8. 建議下一步

先整理「4A 決策確認表」,讓使用者逐項確認 WebApi、ServiceHost、Plugin Loader、Application 共用協調層、部署維運與停止線是否同意。

七項決策確認完成後,再決定要進入哪一條:

  1. WebApi contract 草案。
  2. ServiceHost contract 草案。
  3. Plugin Loader 信任模型與 metadata contract 草案。
  4. 第四階段現場工具 / 管理畫面前置規劃。