第八章 邊界

第八章 邊界

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 整潔的邊界

  • 邊界會經常需要改動,良好的軟件設計無需巨大的投入和重寫即可修改;
  • 在使用控制不了的代碼(第三方庫)時,需要加倍的小心,確保未來的修改代價不要太大;
  • 避免代碼過多的依賴第三方代碼中特定的信息,依靠能控制的好過依靠控制不了的,避免日後受它控制;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章