重構手法24:Change Unidirectional Association to Bidirectional (將單向關聯改為雙向關聯)

來源:互聯網
上載者:User

 

2個類都需要使用對方特性,但其間只有1條單向串連。添加1個反向指標,並使修改函數能夠同時更新2條串連。

動機:開發初期,你可能會在2個類之間建立1條單向串連,使其中一個類可以使用另一個類。隨著時間推移,你可能發現被引用類需要得到其引用者以便進行某些處理。也就是說它需要一個反向指標。但指標是一種單向串連,你不可能反向操作它。通常你可以繞道而行,雖然會耗費一些計算時間,成本還算合理,然後你可以在被引用類中建立一個函數專門負責此行為。但是,有時候想繞過這個問題並不容易,此時就需要建立雙向參考關聯性,或稱為反向指標。如果使用不當,反向指標和很容易造成混亂;但只要你習慣了這種手法,它們其實並不太複雜。

       “反向指標”手法有點棘手,所以在你能夠自如運用之前,應該有相應的測試。通常不用花心思去測試訪問函數,因為普通訪問函數的風險沒有高到需要測試的地步,但本重構要求測試訪問函數,所以它是極少數需要添加測試的重構手法之一。

       本重構運用反向指標實現雙向關聯,其他技術需要其他重構手法。

做法:1、在被引用類中增加一個欄位,用以儲存反向指標。

       2、決定由哪個類—引用端還是被引用端—控制關聯關係。

       3、在被控端建立一個輔助函數,其命名應該清楚指出它的有限用途。

       4、如果既有的修改函數在控制端,讓它負責更新反向指標。

       5、如果既有的控制函數在被控端,就在控制端建立一個控制函數,並讓既有的修改函數調用這個建立的控制函數。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.