Getter 的核心作用是构建安全隔离层,通过权限校验、状态门控、数据脱敏和只读快照返回,阻断对底层驱动的直接访问与敏感操作。

用 Getter 建立迭代器助手层与底层驱动的安全隔离带,核心不是“让 getter 做遍历”,而是借 getter 的访问控制能力,在读取行为发生时做权限校验、状态检查和数据脱敏,把底层驱动的敏感操作(如直接读硬件寄存器、调用裸系统调用、触发物理设备动作)挡在助手层之外。
只暴露受控的“快照值”,不暴露可执行句柄
迭代器助手层对外不应返回原始驱动实例或可调用方法,而应通过 getter 提供只读计算属性:
- 避免:`get driver() { return this._rawDriver; }` —— 外部可随意调用 `driver.read()` 或 `driver.reset()`
- 推荐:`get status() { return { online: this._rawDriver.isReady(), temperature: this._sanitizeTemp(this._rawDriver.getTemp()) }; }` —— 返回纯数据对象,无方法、无引用
- 若需触发动作,显式定义方法如 `startScan()`,而非在 getter 中隐式执行
用 getter 实现状态门控,阻断非法读取时机
某些底层驱动仅在特定状态(如已初始化、未忙、权限已授权)下才允许读取。getter 可天然承载这种门控逻辑:
- 在 getter 内检查 `if (!this._initialized) throw new Error('Driver not ready');`
- 结合私有标志位,如 `get data() { return this._isAuthorized ? this._rawDriver.buffer : null; }`
- 避免在构造函数中就拉取全部数据;延迟到首次 getter 调用时按需获取并缓存
自动脱敏与格式转换,切断原始数据泄露路径
底层驱动可能返回含敏感字段的原始结构(如完整寄存器映射、未加密传感器 ID)。getter 是做清洗的理想位置:
- `get metrics() { const raw = this._driver.readAll(); return { uptime: raw.uptimeMs, errors: raw.errorCount }; }`
- 对时间戳转为相对格式、数值做单位归一化、字符串做哈希截断等,都在 getter 中完成
- 不依赖文档说明“请勿使用 raw 字段”,而是让 `raw` 根本不可见 —— 仅保留 `metrics` 这个安全出口
配合 readonly 与类型系统强化契约
仅靠 getter 不足以形成强隔离;需配合语言级约束:
- TypeScript 中将 getter 返回类型设为 `readonly` 接口或 `ReadonlyArray`,防止外部意外修改
- 不提供对应 setter,也不暴露 `_rawDriver` 字段——即使 JS 运行时能绕过,TS 编译期即报错
- 必要时用 `Object.freeze()` 在 getter 返回前冻结对象,杜绝运行时篡改


















