Przekazywanie bieżącego obiektu w wywołaniu metody jest złą praktyką, jeśli istnieją mniej złożone alternatywy umożliwiające osiągnięcie tego samego zachowania.
Z definicji, powiązanie dwukierunkowe jest tworzone zaraz po this
przekazaniu z jednego obiektu do drugiego.
Cytując Refaktoryzację Martina Fowlera:
Zmień skojarzenie dwukierunkowe na jednokierunkowe (200)
Dwukierunkowe skojarzenia są przydatne, ale mają swoją cenę. Ceną jest dodatkowa złożoność utrzymania dwukierunkowych połączeń i zapewnienie prawidłowego tworzenia i usuwania obiektów. Skojarzenia dwukierunkowe nie są naturalne dla wielu programistów, dlatego często są źródłem błędów
...
Powinieneś używać skojarzeń dwukierunkowych, kiedy tego potrzebujesz, ale nie wtedy, gdy tego nie robisz. Gdy tylko zobaczysz, że dwukierunkowa asocjacja już nie pociąga za sobą, upuść niepotrzebny koniec.
Tak więc teoretycznie powinniśmy słyszeć dzwonki alarmowe, kiedy stwierdzimy, że musimy spasować this
i naprawdę bardzo starać się wymyślić inne sposoby rozwiązania problemu. Oczywiście są chwile, kiedy w ostateczności warto to zrobić.
Często też konieczne jest tymczasowe uszkodzenie projektu, robiąc „złe praktyki” podczas dłuższej refaktoryzacji kodu w celu ogólnej poprawy. (Jeden krok do tyłu, dwa kroki do przodu).
W praktyce znalazłem mój kod poprawiła się znacznie poprzez unikanie dwukierunkowych linków jak ognia.