敏捷软件开发学习随笔(三)

开放—封闭原则

此原则适用于当需要改动程序某一处模块,而导致与之相关的部分模块也需要进行改动的状态。
遵循开放—封闭原则的模块具备以下两个特性:

  1. 对扩展是开放的。当需求更改时,我们可以对模块进行扩展,使得代码能满足新需求
  2. 对于更改是封闭的。也就是扩展模块的时候,不需要改动模块的源代码及相关代码,只需要新增新代码即可。

为了满足以上两个看上去矛盾的特性,则是需要我们将模块给抽象化。创造出一个可以描述一组任意可能行为的抽象体作为基类。而不同的行为则通过这个基类派生。

比如斗地主项目,有经典玩法、癞子玩法、不洗牌玩法,可以抽象出一个游戏基类,然后派生出相应的玩法。

使用“数据驱动”的方法获取封闭性

将对象的不同特性归类成表单,通过读取不同的配置表使得对象拥有不同的表现以此达成开放的扩展封闭的更改。例如消消乐游戏的单元有以下几种(并非全部):

  1. 重叠在该单元上方的单元被消除时该单元也被消除(冰)
  2. 旁边的单元被消除时该单元被消除
  3. 可重叠但不可消除的单元
    上方3种单元可以分为可重叠、不可重叠、可消除、不可消除等属性,那么在归类成表单属性后,只需要类读取到对应的属性,就运行相应的代码即可,而不需要重复写多个特定类来实现。

注意

  1. 项目可能暂时看起来是封闭的,但是新需求到来的时候会发现其实并不是封闭的,所以在每次写项目写新需求的时候,需要自己及时的总结经验,然后通过自己的经验去预测有可能的新需求。在认定一定会出现新需求的类、模块方向上,提前做好抽象
  2. 当出现无法封闭的情况时,通过构造抽象来隔离这种变化:提早抽象的步骤,将不同的规则通过抽象使得与用不到的模块进行隔离。
  3. 因为提前预判抽象比较难准确命中,所以可以允许第一次出现相应情况的时候再去做抽象处理,但是不要在出现一次之后还被同样的新需求给拦住
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值