底层(被依赖者)最好有默认值,上层(依赖者)可以少硬编码。判断不是问题,问题是重复判断;硬编码本身是必须的,问题是重复的硬编码。

现象

比如:

def get_storage_health():
    """
    return storage health info:
    'healthy'/'unhealthy'
    """
    if not sub_container.is_tps_container():
        # Other storage types do not have this check, default healthy
        return "healthy"

这样上层就不需要硬编码判断是什么存储类型了,只要判断 unhealthy 做处理即可。

核心:底层默认值,上层少硬编码

底层(被依赖者)最好有默认值,上层(依赖者)可以少硬编码。

而 get_storage_health 的硬编码是必不可少的,因为这里本身就是触发的地方,且其他类型本身就不支持此操作。

判断不是问题,重复判断才是问题

这就是说的**“判断不是问题,问题是重复判断”**。

这里硬编码其实也一样:

  • 硬编码本身是必须的;
  • 问题是重复的硬编码;
  • 况且这里的硬编码就是判断。

小结

  • 底层(被依赖者)最好有默认值,上层(依赖者)可以少硬编码;
  • 判断不是问题,问题是重复判断;
  • 硬编码本身是必须的,问题是重复的硬编码;
  • 底层默认值让上层只需要处理异常情况,逻辑更简单。