由面向接口思想一想到的「泛接口(非泛型接口)」思想

面向接口思想

  自從咱們開始接觸面向對象編程,隨着不斷的學習,都會逐漸瞭解接口的含義,面向接口編程強調「定義」與「實現」的分離,我認爲其本質就是「解耦兩個對象的依賴關係」,最常聽別人提及的想必就是「依賴倒置原則」的那兩句經典的話:  算法

  • 高層模塊不該該依賴於底層模塊,二者都應該依賴於抽象
  • 抽象不依賴於細節,細節依賴於抽象

  不知道大傢什麼感覺,反正只要提到接口這兩句話我是常常聽。雖然簡短兩句話,但都是實踐總結出來的,是軟件設計必須遵照的原則之一,不然一旦需求變化你的系統可能就要面臨大規模重寫,若要碰上不斷變化的需求,恐怕你就要崩潰了。關於面向接口的詳細知識,本身百度之,此處就再也不贅述。 數據庫

"泛接口"思想

  話說前段時間某公司一直在說泛安全,說不能僅把安全侷限於殺毒軟件方面,要推廣到整個行業。我以爲這個概念挺有想法的,突破傳統安全昇華到了更高的層次。那麼什麼是「泛接口」呢,我認爲它不一樣於通常意義上的接口偏重於具體實現,而是上升到設計層面的一種思想,與通常接口的本質相同,「泛接口」的核心是「解耦」或者「自由互通」,體如今代碼實現層面就好比各類設計模式、Spring等,解耦對象之間的依賴關係,不然會嚴重下降系統的維護性與擴展性;體如今數據庫層面就好比用中間表(或者叫映射表)來解耦表與表的多對多關係,不然表信息與表關係嚴重糅合在一塊兒,形成大量數據冗餘;體如今ORM上就好比用配置文件來解耦對象與數據庫表的對應關係(也能夠用註解的方式)。還有MVC中URL與Action之間的路由機制,等等等等,相似這樣的應用場景還有不少就不一一舉例了,咱們發現,以上場景中涉及到的兩個「對象」之間是互不依賴的,由於都採用了某種手段將一方靈活的轉換爲另外一方,正由於這種「解耦」或者「自由互通」的在各個地方都有使用,所以將其進行抽象,就得出了「泛接口」思想。說到這裏恐怕你仍是雲裏霧裏,尼瑪它究竟是什麼啊,好吧,上圖(這張圖不必定合理,本身瞎畫的,各位就湊合着看吧,哈哈):編程

  總之,「泛接口」比如一個方法論,或者指導思想,當面臨互相依賴的兩個「對象」的時候經過某種手段進行互相解耦或連通,這裏的「對象」不只僅是類,還能夠是模塊或其餘任何事物。在具體應用中,「泛接口」要結合具體業務場景落地爲具體實現手段,以達到兩個「對象」的自由互通。拿上面那些例子來講,「路由機制」實現了URL對象與Action對象的互通;「配置文件+相應算法」實現了類對象與表對象的互通,等等,這裏「路由機制」和「配置文件+相應算法」就是「泛接口」思想落地後的具體方法。也許你會以爲這種「具體處理方法」纔是最重要的,它纔是實現對象互通的關鍵,對於具體業務場景來講的確如此,可是這種「具體方法」老是侷限在必定範圍內的,當你將其抽象到必定高度以後,你會發現這種思想也許能夠不只僅應用在軟件開發方面,放到生活、社會甚至政治中都是能夠的,就比如大陸和臺灣不也在相應政策框架下實現了互通嗎。設計模式

  「泛接口」的實際意義,其實它只是一種解決問題的抽象思想,就猶如哲學中的方法論,你學習了方法論就必定能在面對問題時將其轉換爲具體處理方法嗎,真不必定,還要在實踐中多鍛鍊本身,經過經歷使本身真正領悟其精華才能更好的來指導本身作事。緩存

「泛接口」思想的一個具體應用

  下面拿一個具體應用來講明「泛接口」的落地過程,既然「泛接口」要解耦,就要弄清楚哪裏有耦合,針對具體問題具體處理,在這個應用模塊中,咱們要將多種文件的元數據格式進行相互轉換,面臨的問題主要是源格式與目標格式複雜的複雜對應關係,以下圖左所示,爲了解耦引入中間格式,使各類格式都依賴於中間格式,下降繁多的對應關係,以下圖右因此:安全

                             

 

  經過這種方式能夠將N方級別下降到N的線性級別,但此時耦合依然存在,源與目標都依賴於中間格式,因爲特殊需求須要將中間格式存放在數據庫中,那麼一旦遇到表信息的更改或者數據庫遷移問題,整個模塊就沒法運行了,必須從新修改。爲了解除這種依賴,咱們引入映射關係,經過映射文件描述各類格式和中間格式的映射關係,而後實現每種格式的轉換算法,經過調用「映射處理模塊」獲取不一樣格式與中間格式的元數據對應關係,傳入具體算法中進行格式轉換處理。這樣的話,前面的那種依賴關係被徹底轉移到了「映射文件」中,若是添加新的格式,只須要在映射文件中添加相應的映射關係,並編寫該格式對應的轉換算法,徹底不影響之前的代碼。具體應用時還能夠將映射關係加載到緩存中,下降IO操做,提升程序的靈活性與擴展性。這樣就造成了一個通用的格式轉換模塊,總體結構圖以下所示: 框架

  上圖這種作法能夠自由的將不一樣格式進行互相轉換,圖片的上半部分至關於「泛接口」思想落地後的具體策略,源格式經過該策略轉換爲目標格式。該策略思想還能夠應用於數據遷移中,只不過可能要設置複雜的映射關係來描述各個對象。學習

總結

  "泛接口"是從多個應用中抽象出來的一種「解耦或互通」思想,在遇到具體問題時還需具體分析,而後落地爲具體方法。因此最重要的仍是須要咱們在實踐中不斷鍛鍊,經過本身的努力將抽象理論轉換爲具體方法,而後運用到實際應用中。經過反覆的理論指導與實踐求證,將領悟到的東西轉換爲本身的思想。spa

相關文章
相關標籤/搜索