Getter 的核心是控制读取时机、方式和内容,实现业务层与底层驱动的安全隔离:翻译状态、去抖、脱敏、惰性加载、错误封装,并通过只读契约强化隔离。

用 Getter 访问器建立业务层与底层驱动的安全隔离带,核心不是“读取值”,而是“控制读取的时机、方式和内容”。它让业务代码只看到经过过滤、脱敏、校验、缓存后的稳定接口,完全不感知驱动细节、硬件状态或原始数据结构。
把驱动状态转为只读业务语义
底层驱动常暴露原始字段(如 isConnectedRaw、errorCodeNum),但业务层只需要知道“设备是否可用”或“当前是否在离线模式”。Getter 正好承担翻译职责:
- 将数值错误码映射为可读状态:
get status() { return this._errorCode === 0 ? 'online' : 'degraded'; } - 合并多个驱动信号为单一语义:
get isReady() { return this._isPowered && this._firmwareLoaded && !this._isBusy; } - 屏蔽瞬时抖动:在 getter 中加入简单去抖逻辑(如缓存最近 200ms 内的值),避免业务层被频繁的底层信号跳变干扰
对敏感数据做自动脱敏与权限裁剪
驱动可能返回完整日志、原始传感器数据、设备 ID 等,但业务模块往往无权访问全部信息。Getter 可在出口处统一拦截:
- 返回不可变副本:
get sensorData() { return Object.freeze({ ...this._rawData }); },防止业务误改影响驱动状态 - 字段级脱敏:
get deviceId() { return this._deviceId?.replace(/^(.{4}).*(.{4})$/, '$1****$2'); } - 按角色动态裁剪:
get diagnostics() { return this._userRole === 'admin' ? this._rawDiagnostics : {}; }
封装异步就绪检查,避免业务直面未初始化状态
驱动加载有生命周期,业务调用时可能遇到 undefined 或 null。Getter 可隐藏等待逻辑,提供“即用即得”的体验:
- 惰性初始化:
get config() { if (!this._cachedConfig) this._cachedConfig = this._loadConfigFromDriver(); return this._cachedConfig; } - 返回默认兜底值:
get batteryLevel() { return this._rawBattery ?? 0; },业务无需每处都判空 - 抛出语义化错误:
get temperature() { if (!this._sensorReady) throw new DeviceNotReadyError(); return this._rawTemp; },比TypeError: Cannot read property 'temp' of null更易定位
配合私有字段 + 明确 readonly 意图
隔离有效的前提是“不可绕过”。仅用 private 不够,必须配合 getter 封装,并明确表达只读契约:
- 不提供 setter,杜绝业务层反向写入驱动字段
- TypeScript 中加
readonly修饰 getter 名称(如readonly status: string),强化类型提示 - 文档注明“该值由驱动周期上报更新,禁止手动赋值”,形成双向约束


















