两码农辩态

13 阅读2分钟

辩态?变态?不能往深里想


架构师莫子巡行于代码库,见两码农争辩,面红耳赤,问其故。

灵儿曰:“吾以为,MobX 之妙,在于随心所欲。对象即数据,赋值即响应。吾欲改 store 之属性,挥手即改,代码如行云流水,何其快哉!”

稳儿曰:“非也!吾以为,状态之变,当有法度。若人人皆可随处赋值,数据如脱缰之野马,Bug 如雨后之春笋。一旦出错,不知何人所为,排查之难,难于上青天!”

灵儿反唇相讥:“汝之言虽理,然项目已定,全局配置 enforceActions 锁死不可改,TypeScript 之盾亦未装配。汝欲禁吾随意修改,岂非空谈?”

稳儿默然,虽知其害,苦无良策,遂以此难莫子

莫子笑曰:“此非无解之局也,吾有锦囊二策,可解此忧。”

莫子第一策,曰“移花接木之术”(Proxy): “汝可设一代理(Proxy)**为门神,立于 Store 之前。凡外人欲行赋值(Set)之事,门神即刻斩之,喝曰:‘非 Action 均不可改!’;然若遇 Action 登门,则暗度陈仓,引其至真身,方可施为。如此,外严而内宽,法度自成。”

莫子第二策,曰“深壁固垒之法”(Closure): “若求万全,可废 Class 之形,行闭包(Closure)**之实。将数据深藏于函数深宅之中,外人不可见,亦不可触。唯有借 Getter 窥其貌,借 Action 变其形。此时 Store 仅余空壳接口,无 Setter 之穴,纵有通天手段,亦无法强行赋值。”

灵儿稳儿闻之,皆大悟,抚掌叹曰:“大神之技,深不可测,非吾等所能及也!”


Generated Image December 18, 2025 - 4_05PM (1).jpeg

【技术注解】

这篇短文将之前的技术方案进行了文学化隐喻:

  1. 灵儿(代表灵活派):主张 JS 的动态性和开发效率,对应 MobX 原生支持的可变性。
  2. 稳儿(代表规范派):主张数据流向的可预测性和维护性,担忧“随意修改”带来的混乱。
  3. 困局:对应你提出的限制条件——无法修改全局配置 enforceActions,且不借助 TS readonly 和私有属性。
  4. 莫子的第一策(移花接木):对应 Proxy 方案
    • 门神Proxyset 拦截器。
    • 暗度陈仓:Action 内部通过 this 绑定或 Reflect 操作原始对象,绕过拦截。
  5. 莫子的第二策(深壁固垒):对应 闭包/工厂模式方案
    • 深宅:函数作用域。
    • 无 Setter 之穴:返回的对象只包含 get 和方法,根本没有定义 set,从物理上隔绝了修改。