循環相依性問題

來源:互聯網
上載者:User

標籤:

1:不要出現相互依賴  或者循環相依性, 最好是單向依賴   (之前pb出現循環相依性)  2:api之間不相互依賴, 只是實現之間相互依賴api,這樣就不會出現循環相依性了  比如  現在的需求是  查詢達人需要查詢達人的行程,   查詢達人的行程,也需要查詢行程屬於哪個達人    這個看起來似乎是class User{private Journey journey;}  class Journey{private User user;} 達人模組依賴於行程模組     行程模組也依賴達人模組   如果按照之前的設計一定是這樣的       也就是 user-api 裡面有個方法  需要根據userId來擷取行程對象Journey   而Journey對象在journey-api裡面   所以 user-api  依賴了 journey-api 同理, 需要根據journeyId 來擷取User對象 那麼 journey-api依賴了user-api.  那麼問題來了,maven打包 很可能就會因為兩者相互依賴編譯通不過     如果改進一下呢?是這樣的   那麼現在,實現只依賴api,api之間不依賴 , 然後通過dubbo的暴露服務的方式,自動去尋找對應的實現  事實上,設計也是合理的, 細想一下, user-api為什麼要依賴行程 journey-api 呢 要依賴也是具體的實現的時候  才會擷取到行程  那麼,問題又來了,我需要擷取達人和他的行程 怎麼辦, 也就是最上面的User對象帶journey 別急,如果是這樣的需求,那麼這樣的一個介面,  不應該是user-api 單獨提供,也不應該是 journey-api單獨提供.那麼,怎麼返回呢.答案應該是這樣的,這一個controller裡面調用2次1: 擷取User對象  User user=userService.getById(userId); 2:擷取Journey對象   Journey journey=journerService.getByUserId(userId); class UserResp{privatee User user;private Journey journey;} UserResp resp =new UserResp ();resp .serUser(user);resp .setJourney(journey); 這樣是不是解決了呢 ,如果為了減少遠程調用,那麼是不是可用使用一個base-api  依賴 user-api 和 journey-api  一次返回  那麼對於最開始提到的pb循環相依性也是一樣,2個對象相互依賴,那麼怎麼解決呢,那就是加一個對象,就像UserResp 把2個對象組合到一起  所以解決這種循環相依性的本質,還是抽象一個第三方模組, 來分別依賴User和Journey。而不是兩者互相嵌套,相互依賴  寫到這裡,你是不是覺得,這個循環相依性,像是死結,兩個人都需要對方的鎖,但是都不給,導致都拿不到,然後互相等待。 這就跟2個小朋友都喜歡對方的玩具一樣,都想交換來玩,但是誰都不想先給對方,怕對方不給自己,當然小孩子的心理是這樣的。  那麼這樣依賴怎麼促成這個交易呢, 這就需要一個中間人了,比如爸爸媽媽說:你們先把玩具都給我,我不會要你們的玩具吧,這樣說孩子肯定相信爸爸媽媽於是,當爸爸媽媽都拿到玩具之後,再分別給2個小朋友,這樣是不是就順利完成了? 那麼在這裡爸爸媽媽充當了一個什麼角色呢?沒錯,就是中間人。就是上面的第三方模組。就是上面的UserResp的  上面的情況是A---B  而且B---A的情況 那麼 A---B   B---C  C---A的情況呢  這個是一個環狀這個情況怎麼解決呢? 有沒有辦法?其實,沒錯,還是可以用上述方法實現           

循環相依性問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.