動(dòng)機(jī)(Motivation)
雙向關(guān)聯(lián)(bidirectional associations)很有用,但你也必須為它付出代價(jià),那就是[維護(hù)雙向鏈接,確保對(duì)象被正確創(chuàng)建和刪除]而增加的復(fù)雜度.而且,由于很多程序員并不習(xí)慣使用雙向關(guān)聯(lián),它往往成為錯(cuò)誤之源.
大量的雙向連接(two-way links)也很容易引發(fā)[僵尸對(duì)象]:某個(gè)對(duì)象本來(lái)已經(jīng)該死亡了,卻仍然保留在系統(tǒng)中,因?yàn)閷?duì)它的各項(xiàng)引用還沒(méi)有完全清除.
此外,雙向關(guān)聯(lián)也迫使兩個(gè)classes之間有了相依性.對(duì)其中任一個(gè)class的任何修改,都可能引發(fā)另一個(gè)class的變化.如果這兩個(gè)classes處在不同的package中,這種相依性就是packages之間的相依.過(guò)多的依存性(inter-dependencies)會(huì)造成就緊耦合(highly coupled)系統(tǒng),使得任何一點(diǎn)小小改動(dòng)都可能造成許多無(wú)法預(yù)知的后果.
只有在你需要雙向關(guān)聯(lián)的時(shí)候,才應(yīng)該使用它.如果你發(fā)現(xiàn)雙向關(guān)聯(lián)不再有存在價(jià)值,就應(yīng)該去掉其中不必要的一條關(guān)聯(lián).
雙向關(guān)聯(lián)(bidirectional associations)很有用,但你也必須為它付出代價(jià),那就是[維護(hù)雙向鏈接,確保對(duì)象被正確創(chuàng)建和刪除]而增加的復(fù)雜度.而且,由于很多程序員并不習(xí)慣使用雙向關(guān)聯(lián),它往往成為錯(cuò)誤之源.
大量的雙向連接(two-way links)也很容易引發(fā)[僵尸對(duì)象]:某個(gè)對(duì)象本來(lái)已經(jīng)該死亡了,卻仍然保留在系統(tǒng)中,因?yàn)閷?duì)它的各項(xiàng)引用還沒(méi)有完全清除.
此外,雙向關(guān)聯(lián)也迫使兩個(gè)classes之間有了相依性.對(duì)其中任一個(gè)class的任何修改,都可能引發(fā)另一個(gè)class的變化.如果這兩個(gè)classes處在不同的package中,這種相依性就是packages之間的相依.過(guò)多的依存性(inter-dependencies)會(huì)造成就緊耦合(highly coupled)系統(tǒng),使得任何一點(diǎn)小小改動(dòng)都可能造成許多無(wú)法預(yù)知的后果.
只有在你需要雙向關(guān)聯(lián)的時(shí)候,才應(yīng)該使用它.如果你發(fā)現(xiàn)雙向關(guān)聯(lián)不再有存在價(jià)值,就應(yīng)該去掉其中不必要的一條關(guān)聯(lián).