From 10220027159dc90f19f7c62a7b84bb00c6453d4c Mon Sep 17 00:00:00 2001
From: curtis <curtis@i-mps.com>
Date: 星期一, 30 三月 2026 09:27:16 +0800
Subject: [PATCH] feat: spec 定義

---
 doc/curtis/OCX_溝通與_抽象層抽換.md |   14 +++++++-------
 1 files changed, 7 insertions(+), 7 deletions(-)

diff --git "a/doc/curtis/OCX_\346\272\235\351\200\232\350\210\207_\346\212\275\350\261\241\345\261\244\346\212\275\346\217\233.md" "b/doc/curtis/OCX_\346\272\235\351\200\232\350\210\207_\346\212\275\350\261\241\345\261\244\346\212\275\346\217\233.md"
index 65dba92..75abee5 100644
--- "a/doc/curtis/OCX_\346\272\235\351\200\232\350\210\207_\346\212\275\350\261\241\345\261\244\346\212\275\346\217\233.md"
+++ "b/doc/curtis/OCX_\346\272\235\351\200\232\350\210\207_\346\212\275\350\261\241\345\261\244\346\212\275\346\217\233.md"
@@ -59,10 +59,10 @@
 }
 
 /**
- * 掃描服務抽象介面 (IScanService)
+ * 掃描服務抽象介面 (IOCXService)
  * UI 層僅與此介面溝通,不直接操作底層實作
  */
-export interface IScanService {
+export interface IOCXService {
   initialize(config: ScanConfig): Promise<void>;
   startScan(): Promise<boolean>;
   uploadFiles(): Promise<boolean>;
@@ -75,7 +75,7 @@
  * 實作 A: ActiveX 適配器 (Legacy Adapter)
  * 用於目前環境:UI (TS) -> Delphi Browser -> ActiveX (OCX)
  */
-export class ActiveXScanAdapter implements IScanService {
+export class ActiveXScanAdapter implements IOCXService {
   private ocx: any;
 
   constructor() {
@@ -122,7 +122,7 @@
  * 實作 B: Backend Server 適配器 (Future Adapter)
  * 用於未來環境:UI (TS) -> REST API / WebSocket -> Rust/Go Backend
  */
-export class BackendServerAdapter implements IScanService {
+export class BackendServerAdapter implements IOCXService {
   private apiUrl = "http://localhost:8080/api/scanner";
 
   async initialize(config: ScanConfig): Promise<void> {
@@ -164,7 +164,7 @@
  * 根據環境自動切換實作
  */
 export class ScannerFactory {
-  static getService(): IScanService {
+  static getService(): IOCXService {
     if ((window as any).OCX_INSTANCE) {
       console.log("偵測到 ActiveX 環境,啟用 ActiveX 適配器");
       return new ActiveXScanAdapter();
@@ -184,14 +184,14 @@
 
 ActiveX 的方法通常是同步阻塞的,而後端 API 是非同步的。
 
-- **建議**:在抽象介面(IScanService)中,所有方法都回傳 Promise。
+- **建議**:在抽象介面(IOCXService)中,所有方法都回傳 Promise。
 - **原因**:這樣當你未來切換到後端伺服器(fetch API)時,UI 的調用邏輯(await service.startScan())不需要做任何修改。
 
 ### **3. 實作「心跳」或「狀態輪詢」**
 
 原本 GetSetInf1~7 主要是靠宿主程式主動去「問」OCX。
 
-- **抽象層建議**:在 IScanService 中實作一個 subscribeStatus(callback) 的觀察者模式。
+- **抽象層建議**:在 IOCXService 中實作一個 subscribeStatus(callback) 的觀察者模式。
 - **ActiveX 模式下**:在適配器內部啟動一個 setInterval 去輪詢 GetSetInf。
 - **未來後端模式下**:適配器改用 **WebSocket** 接收後端主動推播的掃描事件。
 - **UI 層感受**:UI 只需要處理 onStatusUpdate 事件,根本不用管底層是用輪詢還是 WebSocket。

--
Gitblit v1.8.0