编程启示录:牛逼的理论

72 阅读1分钟

程序的本质是数据转换,那么逻辑过程的意义可以一概视为根据 input 转换为 output,所以我们可以试着改变一下程序的编写方式,

从驱动式:

f(input)outputf(input) ⇒ output

进化为响应式:

outputWatchtransform(input)output ⇐ Watch_{transform}(input)
Rule=WatchtransformRule = Watch_{transform}
outputRule(input)output ⇐ Rule(input)

为了让观察转换变得可行,我们把 input output 作为字段都定义在抽象的 Struct 类型上,

那么就得到了:

self.outputRule(Struct.input)self.output ⇐ Rule(Struct.input)
selfselfStructStruct 的实例
RuleRule 就可以在 selfself 未实例化之前,提前定义在抽象的 StructStruct 类型上;同时也允许 inputinput outputoutputStructStruct 的不同层级

这就变为了纯粹的数据转换链。只要依赖的 input 更新 output 也会随之更新,整条链也随之更新到最终稳定状态,既简单又保证了确定性。在转换链中,每个节点只干一件事,只需观察依赖的前置数据而不必考虑后续自己会驱动谁或被谁所依赖,彻底摆脱逻辑控制流。

基于该理论,我写了一个工具 Imsure(附 Demo),在日常使用中又有了新发现,这种写法在面对各种业务需求时出奇地好用,具有普适性,就像从算术方法到方程解法一样也具有普适性。

从传统编程需要根据不同业务需求设计不同的实现过程,到全然不用设计,只套用一条普适的方法就能解决:

  1. 定义数据结构。(设未知数)
  2. 定义转换规则。(列方程式)
  3. 为字段赋值。(代入已知数)

至此,就再也不需要推导业务逻辑了。