本篇介紹企業應用架構的基本模式之一分離接口(Separated Interface)模式。這個模式比較常見,相信咱們在應用中已經用過不少次了,甚至在一些架構中成了應用標準,無論用不用獲得。git
分離接口(Separated Interface)github
在一個包中定義接口,而在另外一個與這個包分離的包中實現這個接口。web
背景微信
當開發系統時,可經過減小系統部件之間的耦合程度來改進設計質量。減小耦合的一個較好方法是將類分組,而後組成成包,並限制包間的依賴關係。這樣就能夠對包間的調用加入某些規則。可是,你可能須要調用某些與包之間通常性依賴關係有衝突的方法。在這種狀況下,可使用分離接口模式。架構
作法框架
在一個包中定義接口,但在另外一個包中實現這個接口。此時與接口有依賴關係的客戶沒法感知到實現的存在。分離接口爲入口提供了一個良好的插入點。函數
使用場景spa
當你須要打破系統兩個部分之間的依賴關係時,可使用分離接口,如下爲一些實際場景:設計
你爲一般的狀況編寫了一些抽象代碼,並把這些代碼放到了一個框架包中。框架包須要調用一些特定應用的代碼。對象
一層中某些代碼須要調用另外一層的代碼,但調用者又不該該知道被調用者的存在,例如在Dubbo或者Hsf定義的服務接口
你須要調用另外一開發組開發的函數,可是又不想與他們所提供的API產生依賴關係。
許多開發者,他們爲編寫的每個類都使用了分離接口。我的認爲有些過猶不及,尤爲對於普通應用程序的開發而言。保持接口與實現的分離須要額外的工做。建議只有當你但願打破依賴關係,或者同一接口有多個獨立的實現才使用一個分離接口。若是你把接口和實現放在一塊兒,再在未來某一時刻分開它們也不僅過是一個簡單的重構,徹底能夠將它推遲到你必須如此時再實施。由於某種程序上,這種模式下依賴關係的管理顯得有些過於複雜。通常狀況下,在建立對象時與實現類創建依賴關係,然後只使用接口就已經夠了。但當你想要實施某些依賴規則時就會出現問題,例如要在編譯時進行依賴關係的核查。此時全部的依賴關係必須被移除。對於較小的系統,是否實施依賴規則可有可無,但對大型系統,依賴規則的實施倒是極有價值的。
代碼示例地址:https://github.com/tianyaxiang/ApplicationArchitecture
本文首發於我的微信公衆號:webguan ;歡迎您的關注