复杂度来源之可扩展性

可扩展性指系统为了应对将来需求变化而提供的一种扩展能力,当有新的需求出现时,系统不需要或者仅需要少量修改就可以支持,无须整个系统重构或者重建。

在软件开发领域,面向对象思想的提出,就是为了解决可扩展性带来的问题,后来的设计模式,更是将可扩展性做到了极致。

设计具备良好可扩展性的系统,有两个基本条件:正确预测变化、完美封装变化。但要达成这两个条件,本身也是一件复杂的事情。

预测变化

预测变化的复杂性在于:

  • 不能每个设计点都考虑可扩展性;
  • 不能完全不考虑可扩展性;
  • 所有的预测都存在出错的可能性;

应对变化

方案一

将变化封装在一个变化层,将不变的部分封装在一个独立的稳定层:

无论是变化层依赖稳定层,还是稳定层依赖变化层都是可以的,需要根据具体业务情况来设计。如:

  • 系统需要支持 XML、JSON、ProtocolBuffer 三种接入方式:
  • 系统需要支持 MySQL、Oracle、DB2 数据库存储:

    无论采取哪种形式,通过剥离变化层和稳定层的方式应对变化,都会带来两个主要的复杂性相关的问题。
  1. 系统需要拆分出变化层和稳定层
    对于哪些属于变化层,哪些属于稳定层,很多时候并不是很明确,不同的人有不同的理解;
  2. 需要设计变化层和稳定层之间的接口
    接口设计同样至关重要,对于稳定层来说,接口肯定是越稳定越好。但对于变化层来说,在有差异的多个实现方式中找出共同点,并且还要保证当加入新的功能时原有的接口设计不需要太大修改,这是一件很复杂的事情。

方案二

提炼出一个抽象层和一个实现层。抽象层是稳定的,实现层可以根据具体业务需要定制开发,当加入新的功能时,只需要增加新的实现,无须修改抽象层。
这种方案典型的实践就是设计模式和规则引擎。

--------来源《极客课程》∙ 学习摘要

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值