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