代碼整潔之道-第8章-邊界-讀書筆記

第 8 章 邊界

  本章介紹一些保持軟件邊界整潔的實踐手段和技巧。web

8.1 使用第三方代碼

  在接口提供者和使用者之間,存在與生俱來的張力。第三方程序包和框架提供者追求普適性,這樣就能在多個環境中工做,吸引普遍的用戶。而使用者則想要集中知足特定需求的接口。這種張力會致使系統邊界上出現問題。
  使用相似 Map 這樣的邊界接口,就把它保留在類或近親類中(封裝 Map 的使用到類中)。避免從公共 API 中返回邊界接口,或將便捷接口做爲參數傳遞給公共 API 。框架

8.2 瀏覽和學習邊界

  不要在生產代碼中試驗新東西,而是編寫測試來遍覽和理解第三方代碼。 Jim Newkirk 把這叫作學習性測試(learning tests)。
  在學習性測試中,咱們如在應用中那樣條用第三方代碼。咱們基本上是在經過覈對試驗來檢測本身對那個 API 的理解程度。測試聚焦咱們想從 API 獲得的東西。學習

8.3 學習 log4j

  使用學習性測試方法,在應用程序中使用如何 log4j 包的步驟。測試

8.4 學習性測試的好處不僅是免費

  學習性測試毫無成本。不管如何咱們都得學習要使用的 API ,而編寫測試則是得到這些知識的容易而不會影響其餘工做的途徑。學習性測試是一種精確試驗,幫助咱們增進對 API 的理解。
  學習性測試不光免費,還在投資上有正面的回報。當第三方程序包發佈了新版本,咱們能夠運行學習性測試,看看程序包的行爲有沒有改變。
  學習性測試確保第三方程序包按照咱們想要的方法工做。一旦整合進來,就不能保證第三方代碼總與咱們的需求兼容。原做者不得不修改代碼來知足他們本身的新需求。他們會修正缺陷,添加新功能。風險伴隨新版本而來。若是第三方程序包的修改與測試不兼容,咱們就能立馬發現。
  不管你是否須要經過學習性測試來學習,總要有一系列與生產代碼中調用方式一致的輸出測試來支持整潔的邊界。不使用這些邊界測試來減輕遷移的勞力,咱們可能會超出應有時限,長久地綁在舊版本上面。設計

8.5 使用尚不存在的代碼

  還有另外一種邊界,那種將已知和未知分隔開的邊界。在代碼中總有許多地方是咱們的知識未及之處。有時,邊界那邊就是未知的(至少目前未知)。有時,咱們並不往邊界那邊看過去。
  使用尚不存在的代碼,能夠先定義本身使用的接口,接口中包括須要使用的方法,這是咱們但願獲得的接口。而後編寫類實現接口,等到真實的 API 被定義出來,只須要修改實現類而已,而且當 API 發生變更時,類時惟一須要改動的地方。code

8.6 整潔的邊界

  邊界上會發生有趣的事,改動是其中之一。有良好的軟件設計,無需巨大投入和重寫便可進行修改。在使用咱們控制不了的代碼時,必須加倍當心保護投資,確保將來的修改不至於代價太大。
  邊界上的代碼須要清洗的分割和定義了指望的測試。應該避免咱們的代碼過多地瞭解第三方代碼中的特定信息。依靠你能控制的東西,好過依靠你控制不了的東西,省得往後受它控制。
  咱們經過代碼中少數幾處引用第三方邊界接口的位置來管理第三方邊界。能夠像咱們對待 Map 那樣包裝它們(將 Map 包裝到類或近類中),也可使用 ADAPTER 模式將咱們的接口轉換爲第三方提供的接口(將須要使用的 API 經過 Adapter 類調用)。採用這兩種方式,代碼都能更好地與咱們溝通,在邊界兩邊推進內部一致的用法,當第三方代碼有改動時修改點也會更少。接口

8.7 文獻

相關文章
相關標籤/搜索