Передавать текущий объект в вызове метода - плохая практика, если есть менее сложные альтернативы для достижения того же поведения.
По определению, двунаправленная ассоциация создается, как только thisпередается от одного объекта к другому.
Процитируем рефакторинг Мартина Фаулера:
Измените двунаправленную ассоциацию на однонаправленную (200)
Двунаправленные ассоциации полезны, но они имеют свою цену. Цена - добавленная сложность поддержания двусторонних связей и обеспечения правильного создания и удаления объектов. Двунаправленные ассоциации неестественны для многих программистов, поэтому часто являются источником ошибок.
...
Вы должны использовать двунаправленные ассоциации, когда вам нужно, но не когда вы этого не сделаете. Как только вы увидите, что двунаправленная ассоциация больше не действует, отбросьте ненужный конец.
Итак, теоретически мы должны слышать сигнал тревоги, когда обнаруживаем, что нам нужно пройти, thisи очень стараемся придумать другие способы решения данной проблемы. Конечно, бывают случаи, когда в крайнем случае имеет смысл это делать.
Также часто бывает необходимо временно испортить ваш дизайн, выполняя «плохие практики», во время более длительного рефакторинга вашего кода для общего улучшения. (Шаг назад, два шага вперед).
На практике я обнаружил, что мой код значительно улучшился, поскольку он избегал двунаправленных ссылок, как чумы.