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