Pull Complexity Downwards

这章主要讨论如何创建一个更深的类

例子:配置参数

接口提供一些会控制接口行为的参数,比如缓存的大小或者是请求重试的次数。
接口的使用者必须提供参数合适的值
支持使用配置参数的人回收配置参数允许使用者来根据特定的需求来调整参数,从而影响接口的行为。在一些情况下,对于底层的代码来说,不知道最佳的执行方案,而接口的使用者会更加清楚。
但是,在一些场景下,对于接口的使用者来说,很难确定最佳的参数取值;另外对于一些参数,可以通过在方法中多添加一点儿代码来自动确定参数的取值。
比如对于一个网络协议,必须处理丢包的问题。如果发送一个请求,过了很久都没有收到响应,那么需要重新发送请求。一种确定重试间隔参数取值的方法是引入配置参数。然而,传输协议是可以自己来确定这个参数的取值的,比如计算请求成功返回响应的时间,然后将该时间的倍数作为该参数的取值。这种自动计算的好处就是可以动态地改变,而手动指定参数值的方法可能会指定一个不适合当前环境的参数取值
因此应该尽量少地使用配置参数。当暴露一个配置参数的时候,我们应该问问自己用户是否能够指定一个比我们指定的取值更好的参数取值。当我们指定一个配置参数的时候,考虑系统是否能够自动计算一个参数的取值。
理想上,一个系统应该完全解决一个问题,而使用配置参数,会导致无法完全解决这个问题,从而增加系统的复杂性

chapter8 Pull Complexity Downwards相关推荐

  1. 在什么情况下,“ git pull”会有害吗?

    本文翻译自:In what cases could `git pull` be harmful? I have a colleague who claims that git pull is harm ...

  2. 《D o C P》学习笔记(4 - 1)Dealing with complexity through search - Lesson 4

    备注1:每个视频的英文字幕,都翻译成中文,太消耗时间了,为了加快学习进度,我将暂停这个工作,仅对英文字幕做少量注释. 备注2:将.flv视频文件与Subtitles文件夹中的.srt字幕文件放到同1个 ...

  3. #圈复杂度 - Cyclomatic Complexity

    ##概念 循环复杂度(Cyclomatic complexity)也称为条件复杂度,是一种软件度量,是由老托马斯·J·麦凯布(英语:Thomas J. McCabe, Sr.) 在1976年提出,用来 ...

  4. GitHub 中 Merge pull request 的 3 中选项说明

    Merge pull request 提供了 3 种 merge 方法: Create a merge commit:GitHub 的底层操作是 git merge --no-ff.feature 分 ...

  5. Git 常用操作(5)- git clone/git checkout -b/git diff/git push/git pull

    1. git clone--获取远程仓库 当 git fetch 命令从服务器上抓取本地没有的数据时,它并不会修改工作目录中的内容.它只会获取数据然后 让你自己合并. 然而,有一个命令叫作 git p ...

  6. IDEA : Git Pull Failed 解决(IDEA中使用stash功能)

    一.问题: 本地要commit代码,commit之前需pull代码,但pull提示冲突.如下 Git Pull Failed Your local changes would be overwritt ...

  7. 解决每次git pull需要不用输入用户名信息

    问题描述 在服务器上每次执行git pull,都提示输入用户名和密码 现象分析 我们在git clone工程时有2中形式 https 和git@git.当你使用前者拉取工程时每次都需要输入用户名和密码 ...

  8. git init 会不会清空_Git命令:git pull amp; git fetch

    前言 本地仓库需要获取远程仓库中的更新,需要用到Git命令pull或fetch,这两个命令在实际使用时有何区别,下面详细介绍下. 使用工具 Git v2.29.2.2 TortoiseGit v2.4 ...

  9. Git fetch和git pull的区别

    原文:http://www.tech126.com/git-fetch-pull/ Git中从远程的分支获取最新的版本到本地有这样2个命令: 1. git fetch:相当于是从远程获取最新版本到本地 ...

最新文章

  1. Linux系统支持的目录文件有,【技术支持】linux操作系统有哪些文件和目录操作相关命令?...
  2. PHP的DES加解密函数 与JAVA兼容
  3. 用 Celery 实现邮件推送系统
  4. mvn deploy 推送到私有仓库,注意当前日期
  5. springboot redis token_Spring Boot + Redis + 注解 + 拦截器来实现接口幂等性校验
  6. 获取iOS任意线程调用堆栈(二)符号化理论:Mach-o文件结构
  7. 多个excel文件内容合并到一个excel文件的多个sheet的小程序
  8. VS 解决方案平台和解决方案配置
  9. 轻松四步配置Oracle数据库监听
  10. 论文笔记之:Deep Reinforcement Learning with Double Q-learning
  11. 记录一次k3的SQLServerException: 将截断字符串或二进制数据
  12. Winform界面中实现通用工具栏按钮的事件处理
  13. 学校人脸识别门禁功能介绍
  14. postgresql中实现按周统计详解
  15. sql server日期格式转换方法大全
  16. 修改docker ip网段
  17. 【Spring MVC】Json 前后端合并
  18. 计算机科学与技术补中益气丸的成分,补中益气丸的成分是什么
  19. JAVA初中作品_美术作品大全初中生
  20. Android 自定义相机 身份证拍照 自定义身份证相机

热门文章

  1. Python买家具(类)
  2. 电池战争:“新石油”与中欧分野
  3. esp32开发快速入门 8 : MQTT 的快速入门,基于esp32实现MQTT通信
  4. 一个在线显示doc文本的实例
  5. python之文件操作、对.txt文本文件的操作(读、写、修改、复制、合并)、对json文本文件的操作、json字符串与字典的相互转换。
  6. php里切换不了输入法,电脑中怎么切换输入法
  7. 如何把公司网址生成二维码
  8. Python爬取网易云音乐热歌榜(爬虫)
  9. ListView制作简单表格
  10. QLU ACM2018新生赛