Es una mala práctica pasar el objeto actual en una llamada a un método si existen alternativas menos complejas para lograr el mismo comportamiento.
Por definición, una asociación bidireccional se crea tan pronto como thisse pasa de un objeto a otro.
Para citar Refactoring, de Martin Fowler:
Cambiar asociación bidireccional a unidireccional (200)
Las asociaciones bidireccionales son útiles, pero tienen un precio. El precio es la complejidad adicional de mantener los enlaces bidireccionales y garantizar que los objetos se creen y eliminen correctamente. Las asociaciones bidireccionales no son naturales para muchos programadores, por lo que a menudo son una fuente de errores.
...
Debe utilizar asociaciones bidireccionales cuando sea necesario, pero no cuando no lo necesite. Tan pronto como vea que una asociación bidireccional ya no está tirando de su peso, deje caer el extremo innecesario.
Entonces, teóricamente, deberíamos escuchar las alarmas cuando nos damos cuenta de que necesitamos aprobar thisy esforzarnos mucho para pensar en otras formas de resolver el problema en cuestión. Por supuesto, hay ocasiones en las que, como último recurso, tiene sentido hacerlo.
Además, a menudo es necesario corromper su diseño temporalmente, haciendo 'cosas de malas prácticas', durante una refactorización a largo plazo de su código para una mejora general. (Un paso atrás, dos pasos adelante).
En la práctica, he descubierto que mi código ha mejorado enormemente al evitar los enlaces bidireccionales como la plaga.