第八章 边界

第八章 边界

8.1 使用第三方代码

  • 借口提供者和使用者之间存在天然的分歧:提供者希望借口具有普适性,而使用者希望满足特定的需求;这样的差异导致在使用第三方接口时在边界上出现问题

  • //此方法将sensors暴露在外部,在函数间传递不安全
    Map sensors = new HashMap();
    ...
    Sensor s = (Sensor)sensors.get(sensorId);
    
    //此种方法在使用Sensors时无需考虑其内部实现,避免了对sensors的无意修改;当HashMap修改时,对Sensors 的修改就在此类的内部,做到了很好的隔离
    public class Sensors{
    private Map sensors = new HashMap();
    
    public Sensor getById(String id){
      return (Sensor) sensors.get(id);
    }
    ....
    }
  • 以上的重构方法使HashMap的使用隔离Sensors类的内部,当HashMap修改时,只需修改Sensors类一处,实现低耦合;

8.2 浏览和学习边界

  • 对于第三方代码的浏览和学习应该独立出来,而不是在生产代码中;
  • 编写测试来遍览和理解第三方代码,称为学习性测试
  • 在测试时聚焦于想要了解的特性

8.3 学习log4j

  • 该标题下的内容为一步步实现log4j的日志输出

8.4 学习性测试的的好处不只是免费

  • 学习性测试是精确试验,帮助增进对API的理解;
  • 对于新发行的第三方软件包可以运行学习性测试,查看功能是否改变;
  • 使用好边界测试,方便软件迁移和第三方代码升级;

8.5 使用尚不存在的代码

  • 另一种边界已知未知
  • 项目中可能存在能力圈范围之外的领域,工作可以先从远离该领域的地方开始;
  • 对于不存在的接口可以先按照想要的样子编写接口,细节等该领域的人员设计出来后,再完善接口中的细节;
  • 编写想要的接口可以使接口在自己的控制之下,有助于保持代码的可读性和内聚性;

8.6 整洁的边界

  • 边界会经常需要改动,良好的软件设计无需巨大的投入和重写即可修改;
  • 在使用控制不了的代码(第三方库)时,需要加倍的小心,确保未来的修改代价不要太大;
  • 避免代码过多的依赖第三方代码中特定的信息,依靠能控制的好过依靠控制不了的,避免日后受它控制;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章