方法 vs 函数
正确使用函数和方法,对于编码十分重要。
- 函数是数据加工流程蓝图。
- 引起函数变化的应该(最好)只有参数。
- 方法面向数据,维护和展现其状态。
- 多次调用或不同调用次序导致不同输出结果。
- 多个方法共同维护状态,存在耦合和关联性。
方法带来很多设计层面上的概念,方法可以看成是函数的一种包装,在实现层面方法是函数的语法糖。
在汇编角度来看,方法和函数没多大区别,方法是高级语言语法糖。在设计角度或者思想层面看,方法和函数有很大不同。函数实际上描述的是一个加工流程蓝图,它在程序运行期创建堆栈帧用于存储状态,把数据或者参数加入工艺流程里得到结果,它更注重算法过程。函数最好的设计是函数本身是固定的,相对来说容易通过单元测试把代码固化或者冻结起来,它本身变化只有一种,传递什么参数得到什么结果,所有的变化只和参数有关系。
方法面向数据,当方法和某一个数据绑定的时候,这个方法的生命周期和这个数据有关系。方法的核心是数据,修改数据和展现数据,方法的内容围绕着数据进行不应该超出数据之外。例如增加计数器每次调用都会导致结果不一样,调用次数和次序不同导致结果也不同。设计一个算法最好的方式是设计成一个函数,它本身是无状态的,选择函数还是选择方法关键在于设计一个加工算法还是围绕着数据。设计方法的前提在于第一是不是必须的,第二是否提供展示。方法属于对象的内在条件,而组合是各自的平等的。
订单实际上是由购物车转换过来的,它们都用来存储商品。购物车有几个问题,第一购物车未必需要用户登录,第二购物车可能跨多个设备,购物车的设计纯粹是围绕商品进行,它对于用户的身份并不关心ÿ