【编程范式】【事件溯源】范式新感悟

范式

  目前有三种主流的说法,结构化编程、函数式编程、面向对象编程;他们分别限制了程序员写程序的能力

  • 结构化编程批判了go to,引入循环、分支等结构保证了程序的安全稳定性;
  • 自从发明了变量可以放到内存后,函数变量可以在函数退出后继续存在于内存中,引出面向对象编程;

函数式编程

  例子入门:  

print (take 25 (map (fn [X] ( * X X) )))

  上面的例子,其实等价于:

public class Squint {
   public static void main(String args[]){
       for(int i=0;i<25;i++){
          System.out.print( i*i);
       }
   }  
}

  其实函数式编程对比OOP,最大的不同就是变量是不可变而且没有放在内存堆中;

  函数式编程的变量是不可变的

  做架构想要应用好函数式编程,那么就需要在设计中学会分离可变组件和不可变组件;可变组件通常可以抽象为命令

  事件溯源:

  eventSource就是函数式编程的一种体现;没有了变量,自然就可以避免并发的问题

  版本控制:

  其实git本身就是事件溯源的应用

面向对象编程

  什么是对象?继承、封装、多态?其实对象的核心是状态,当抽象出来的数据代表了状态,代表状态的数据可以脱离函数控制范围之后,使得OOP有了意义。而多态则约定,则直接限制了程序员的能力,对函数指针的控制能力。

事件溯源

  有状态的对象,通常刻画的是对象的当前状态,而不是历史状态,如果想把历史状态给记录下来,那么可以把每一次历史状态的变化给记录下来,这样就可以还原每一次的历史状态,这就是事件溯源。这也是记录状态的两种方式:

  • 只记录当前状态:状态机、对象、快照
  • 记录每一次变化的状态:事件、事件溯源
posted @ 2022-01-26 01:52  饭小胖  阅读(38)  评论(0编辑  收藏  举报