zoukankan      html  css  js  c++  java
  • 复杂度来源—可扩展性

    极客时间:《从 0 开始学架构》复杂度来源:可扩展性

    引言

    可扩展性指系统为了应对将来需求变化而提供的一种扩展能力,当有新的需求出现时,系统不需要或者仅需要少量修改就可以支持,无须整个系统重构或者重建。
    在软件开发领域,面向对象思想的提出,就是为了解决可扩展性带来的问题;后来的设计模式,更是将可扩展性做到了极致
    设计具备良好可扩展性的系统,有两个基本条件:正确预测变化、完美封装变化

    1. 预测变化

    预测变化的复杂性在于:

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

    对于架构师来说,如何把握预测的程度和提升预测结果的准确性,是一件很复杂的事情,而且没有通用的标准可以简单套上去,更多是靠自己的经验、直觉,所以架构设计评审的时候经常会出现两个设计师对某个判断争得面红耳赤的情况,原因就在于没有明确标准,不同的人理解和判断有偏差,而最终又只能选择一个判断。

    1. 应对变化

      第一种应对变化的常见方案是将“变化”封装在一个“变化层”,将不变的部分封装在一个独立的“稳定层”

    无论采取哪种形式,通过剥离变化层和稳定层的方式应对变化,都会带来两个主要的复杂性相关的问题。

    • 系统需要拆分出变化层和稳定层
    • 如何确定出哪些属于变化层,哪些属于稳定层
    • 需要设计变化层和稳定层之间的接口

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

  • 相关阅读:
    仅允许修改输入框括号中内容
    Wget/httrack 爬取整站资源
    413 Request Entity Too Large 问题及方案详细分析
    python 安装 tensorflowjs
    WiFi TIM DTIM
    免费 CDN 玩法 —— 文件一键上传到 NPM
    函数式编程 —— 将 JS 方法函数化
    uniapp 复制操作
    splice() 方法用于添加或删除数组中的元素
    uni更改顶部标题
  • 原文地址:https://www.cnblogs.com/whiteBear/p/15659500.html
Copyright © 2011-2022 走看看